How to Recover a Forgotten MySQL Root Password

By TechnoRoots Team · Dec 29, 2025

How to Recover a Forgotten MySQL Root Password

Locked out of your MySQL database? You're not alone. We've all been there: you set a password months ago, stored it... somewhere... and now you need it. The good news? Recovery is straightforward, and you don't need to reinstall MySQL. In this guide, you'll learn 4 proven methods that work on Linux, macOS, and Windows, plus how to prevent this from happening again.

Table of Contents


Why Forgotten Passwords Happen (And Why Recovery Is Possible)

Forgotten passwords are one of the most common database administration issues. Unlike some systems, MySQL allows recovery because you likely still have system-level access to your server. This guide leverages that access to temporarily bypass permission checks, reset your password, and re-enable security.

The bottom line: If you can SSH into your server or access your Windows machine directly, you can recover your MySQL root password. No data loss, no reinstall required.


Method 1: Linux/macOS Quick Reset (No Config Files)

This is the fastest method and requires no file editing. You'll stop MySQL, restart it without permission checks, and set a new password.

Step 1: Stop the MySQL Service

Open your terminal and run:

sudo systemctl stop mysql

On older macOS systems or servers using non-systemd init:

sudo /usr/local/mysql/support-files/mysql.server stop

Step 2: Start MySQL in Safe Mode (No Permission Checks)

sudo mysqld_safe --skip-grant-tables &

This command starts MySQL without loading the permission tables. The & runs it in the background. You should see: [1] [process_id].

Step 3: Connect Without a Password

mysql -u root

No password needed because permissions are skipped. You should see the mysql> prompt.

Step 4: Reload the Grant Tables

Before you can change the password, you must tell MySQL to reload its permission system:

FLUSH PRIVILEGES;

Key takeaway: Without FLUSH PRIVILEGES, your password change won't register.

Step 5: Set Your New Root Password

For MySQL 5.7.6 and later (the modern syntax):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password_here';

For MySQL 5.7.5 and earlier:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_new_password_here');

Replace your_new_password_here with a strong password. Then exit:

EXIT;

Step 6: Restart MySQL Normally

sudo systemctl restart mysql

Test your new password:

mysql -u root -p

When prompted, enter your new password. Success means you're back in control.

Expected result: You should see the mysql> prompt without errors.


Method 2: Edit MySQL Configuration File

If the above method doesn't work, or you prefer a more permanent approach, you can edit MySQL's configuration file directly.

Step 1: Locate and Edit Your MySQL Config File

Common locations:

  • /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu/Debian)
  • /etc/my.cnf (CentOS/RHEL)
  • /usr/local/mysql/etc/my.cnf (macOS)

Open it with nano or your preferred editor:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Step 2: Add the Skip-Grant-Tables Directive

Find the [mysqld] section (usually near the top). Add this line:

skip-grant-tables

It should look like:

[mysqld]
skip-grant-tables
user=mysql

Save the file (Ctrl+X, then Y, then Enter in nano).

Step 3: Restart MySQL

sudo systemctl restart mysql

Step 4: Connect and Reset Your Password

mysql -u root

Then run:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
EXIT;

Step 5: Remove the Skip-Grant-Tables Line

Critical: This line bypasses all permissions—remove it immediately.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Delete the skip-grant-tables line, save, and restart:

sudo systemctl restart mysql

Verify permissions are back:

mysql -u root -p

Method 3: Windows Recovery Steps

Windows recovery uses the same concept but different commands.

Step 1: Stop the MySQL Service

Open Command Prompt as Administrator and run:

net stop MySQL80

Replace MySQL80 with your MySQL version (could be MySQL57, MySQL81, etc.). Check Services (services.msc) if unsure.

Step 2: Start MySQL Without Grant Tables

In the same Command Prompt:

mysqld --skip-grant-tables

Leave this window open:it's now running MySQL. You'll see no errors or messages.

Step 3: Open Another Command Prompt as Administrator

mysql -u root

Step 4: Reset Your Password

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
EXIT;

Step 5: Restart MySQL Service Normally

In your first Command Prompt window, press Ctrl+C to stop MySQL.

Then start the service normally:

net start MySQL80

Test your new password:

mysql -u root -p

Method 4: Reset Using Another Admin Account

If you remember credentials for a different MySQL user with sufficient privileges (like a database admin account), this method is fastest.

mysqladmin -u admin_user -p password your_new_password

You'll be prompted for the existing user's password. This changes the root password without restarting MySQL.

When to use this: Only if you have another admin-level account you can access.


Common Mistakes That Block Recovery

These are the issues that frustrate people most—avoid them:

Mistake 1: Skipping FLUSH PRIVILEGES

You'll set a password, restart MySQL, and find it still doesn't work. Always run FLUSH PRIVILEGES; after connecting in safe mode, before changing the password.

Mistake 2: Not Removing skip-grant-tables from Config

If you added it to your config file and forgot to remove it, your MySQL installation remains vulnerable to anyone with server access. Delete it the same day.

Mistake 3: Wrong MySQL Version Syntax

The ALTER USER syntax works in MySQL 5.7.6+. If you're on 5.5 or 5.6, use SET PASSWORD instead. Check your version:

mysql --version

Mistake 4: MySQL Service Won't Start in Safe Mode

Common cause: Wrong syntax or conflicting options in your config file. Ensure skip-grant-tables is by itself under [mysqld] with no typos.


How to Prevent This Next Time

Future-proof your access with these practices:

Store passwords securely

Use a password manager like 1Password, LastPass, or Bitwarden. It takes 10 seconds and saves hours of stress.

Create backup admin accounts

CREATE USER 'backup_admin'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'backup_admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Document your setup

Keep a secure text file with MySQL version, location of config files, and admin account details.

Use authentication plugins

Consider mysql_native_password (easier to recover) over other options if security policy allows.

Limit root access

DELETE FROM mysql.user WHERE User='root' AND Host != 'localhost';
FLUSH PRIVILEGES;

Performance Impact & Security Considerations

Performance

Recovering your password has zero impact on MySQL performance. You're simply changing authentication credentials, not reconfiguring the database engine.

Security

The skip-grant-tables flag is a security risk. Use it only during recovery and remove it immediately. Never leave it enabled in production.

Backup

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup

When NOT to Use These Methods

  • If you don't have server access: You'll need to contact your hosting provider. They may verify ownership and reset it remotely.
  • If you're on a managed service (AWS RDS, Google Cloud SQL): Use your provider's password reset tool—you can't SSH into the server to use these methods.
  • If your data is critical: Test recovery on a staging environment first, not your production database. See MySQL Testing Best Practices for more.
  • If you suspect a compromise: Recovery is fine, but immediately review your MySQL logs for unauthorized access:
SHOW BINARY LOGS;

For more MySQL security and administration, check out:


Next Steps

Try it now: If you're locked out, pick the method that matches your OS (Linux/macOS = Method 1, Windows = Method 3) and follow the steps. It should take 5 minutes max.

Need more help? Contact us if you run into any issues or need further guidance. We're here to help you get back in control of your MySQL database quickly.


Key Takeaways

You can recover your forgotten MySQL root password in minutes using built-in recovery modes. Method 1 (safe mode restart) works for most Linux/macOS users and requires no file editing. Always remove skip-grant-tables after recovery and store your new password securely. For production databases, create backup admin accounts and test recovery procedures in a staging environment first.

The hardest part isn't the recovery: it's remembering to document your credentials before you need them.

Related Posts

How to Upgrade Oracle Linux 7.9 to 8.10 Using LEAPP

Oracle Linux 7.9 reached end of support on July 1, 2024. Systems running OL7.9 no longer receive...

TechnoRoots Team · Jan 05, 2026
Read More →

How to Fix Slow MySQL Queries Using EXPLAIN Analysis

You're debugging a slow query that's been running for 45 seconds. Your first instinct is to add a...

TechnoRoots Team · Dec 26, 2025
Read More →

MySQL Connection Refused: Step-by-Step Troubleshooting Guide

A comprehensive, well-organized guide to diagnosing and fixing "Connection Refused" erro...

TechnoRoots Team · Dec 18, 2025
Read More →