Tutorial

How To Reset Your MySQL or MariaDB Root Password

How To Reset Your MySQL or MariaDB Root Password
Not using Ubuntu 16.04?Choose a different version or distribution.
Ubuntu 16.04

Introduction

Forgetting passwords happens to the best of us. If you forget or lose the root password to your MySQL or MariaDB database, you can still gain access and reset the password if you have access to the server and a sudo-enabled user account.

This tutorial will cover resetting the root password for older and newer versions of MySQL and MariaDB.

Prerequisites

To recover your root MySQL/MariaDB password, you will need:

  • Access to the MySQL or MariaDB Linux server with a sudo user.

Step 1 — Identifying the Database Version

Most modern Linux distributions ship with either MySQL or MariaDB, a popular drop-in replacement that is fully compatible with MySQL. Depending on the database used and its version, you must use different commands to recover the root password.

You can check your version with the following command:

mysql --version

You’ll see some output like this with MySQL:

MySQL output
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper

Or output like this for MariaDB:

MariaDB output
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Note which database and version you’re running, as you’ll use them later. Next, you need to stop the database to access it manually.

Step 2 — Stopping the Database Server

To change the root password, you must shut down the database server beforehand.

You can do that for MySQL with:

sudo systemctl stop mysql

And for MariaDB wtih:

sudo systemctl stop mariadb

After the database server is stopped, you’ll access it manually to reset the root password.

Step 3 — Restarting the Database Server Without Permission Checking

If you run MySQL and MariaDB without loading information about user privileges, you can access the database command line with root privileges without providing a password. This will allow you to gain access to the database without knowing it.

To do this, you must stop the database from loading the grant tables, which store user privilege information. Because this is a bit of a security risk, you should also skip-networking to prevent other clients from connecting.

Start the database without loading the grant tables or enabling networking:

sudo mysqld_safe --skip-grant-tables --skip-networking &

The ampersand at the end of this command will make this process run in the background so you can continue to use your terminal.

Now, you can connect to the database as the root user, which should not require a password.

mysql -u root

You’ll immediately see a database shell prompt instead.

MySQL prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
MariaDB prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Now that you have root access, you can change the root password.

Step 4 — Changing the Root Password

One simple way to change the root password for modern versions of MySQL is using the ALTER USER command. However, this command won’t work right now because the grant tables aren’t loaded.

Let’s tell the database server to reload the grant tables by issuing the FLUSH PRIVILEGES command.

  1. FLUSH PRIVILEGES;

Now, we can change the root password.

Use the following command for MySQL 5.7.6 and newer and MariaDB 10.1.20 and newer.

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

For MySQL 5.7.5 and older as well as MariaDB 10.1.20 and older, use:

  1. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Make sure to replace new_password with your new password of choice.

Note: If the ALTER USER command doesn’t work, it usually indicates a bigger problem. However, you can try UPDATE ... SET to reset the root password.

  1. UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

Remember to reload the grant tables after this.

In either case, you should see confirmation that the command has been successfully executed.

Output
Query OK, 0 rows affected (0.00 sec)

The password has been changed, so you can now stop the manual instance of the database server and restart it as it was before.

Step 5 — Restart the Database Server Normally

First, stop the instance of the database server that you started manually in Step 3. This command searches for the PID, or process ID, of MySQL or MariaDB process and sends SIGTERM to tell it to exit smoothly after performing clean-up operations. You can learn more in this Linux process management tutorial.

For MySQL, use:

sudo kill `cat /var/run/mysqld/mysqld.pid`

For MariaDB, use:

sudo kill `/var/run/mariadb/mariadb.pid`

Then, restart the service using systemctl.

For MySQL, use:

sudo systemctl start mysql

For MariaDB, use:

sudo systemctl start mariadb

Now you can confirm that the new password has been applied correctly by running:

mysql -u root -p

The command should now prompt for the newly assigned password. Enter it, and you should gain access to the database prompt as expected.

Conclusion

You now have administrative access to the MySQL or MariaDB server restored. Make sure the new root password you choose is strong and secure and keep it in safe place.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Mateusz Papiernik
Mateusz PapiernikSoftware Engineer, CTO @Makimo
See author profile

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
10 Comments
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

This tutorial made my mysql database to not function. now I can’t even restart it, my site doesn’t even work now because it can’t connect to the database.

Please be more specific. At which step or steps did you encounter problems? Did you see any error messages? What happens when you try to restart the database?

The set of commands in the tutorial can result in setting a wrong root password by accident, but cannot result in corrupting the database and/or server configuration.

To help you with your problem more details are necessary.

It says now when I am trying mysql -u root -p

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2 “No such file or directory”)

This means the database is not running at all. Please try systemctl restart mysql to restart MySQL and if it fails post the results of tail /var/log/mysql/error.log.

okay it’s working, but still the root password isn’t changed.

alexdo
Site Moderator
Site Moderator badge
May 31, 2024

You can double-check the syntax of the command and the returned status.

Also review the MariaDB error log (/var/lib/mysql/*.err) for any error messages or warnings that might indicate the cause of the issue. Look for any entries related to password changes or authentication failures.

Regards

Maybe you have omitted one of the steps by accident. Try following the tutorial again step by step. If you don’t feel like doing this on a production server, create a fresh droplet with MySQL only to verify the steps in a safe environment first.

alexdo
Site Moderator
Site Moderator badge
May 31, 2024

You can review the MySQL error log file (error.log) for any error messages or warnings that might indicate the cause of the connection issue. The error log file is typically located in the MySQL data directory (/var/log/mysql/error.log or /var/log/mariadb/mariadb.log).

If the MySQL or MariaDB service is running but you’re still unable to connect, there may be an issue with the MySQL configuration. Check the MySQL configuration file (my.cnf or my.ini) to ensure that the socket file path is correct. The socket file path is typically specified under the [mysqld] section. If the path is incorrect, update it to point to the correct location.

Regards

Thank you very much for this tutorial. On CentOS with MySQL 5.7.17 when I launch the mysqld_safe --skip-grant-tables --skip-networking I get the folloqing message: mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exist. After this, MySQL doesn’t start so when I try mysql -u root I get as an answer ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2). I’m stuck there as I cannot restart MySQL with --skip-grant-tables oprion enabled… Any clue?

do this before:

sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld

alexdo
Site Moderator
Site Moderator badge
May 31, 2024

It seems like there are two separate issues here: the missing directory for the UNIX socket file and the inability to start MySQL with the --skip-grant-tables option.

You can create the directory manually using the following command:

sudo mkdir -p /var/run/mysqld

Make sure to set the correct permissions for the directory:

sudo chmod 0755 /var/run/mysqld

After creating the directory, attempt to start MySQL again.

Once you have created the directory for the UNIX socket file, you can attempt to start MySQL with the --skip-grant-tables option again:

sudo mysqld_safe --skip-grant-tables --skip-networking &

If MySQL still fails to start with this option, there may be other issues with your MySQL configuration or installation.

You can heck the MySQL error log (/var/log/mysql/error.log or /var/log/mysqld.log) for any error messages that might indicate the cause of the failure.

You can also try starting MySQL without the --skip-grant-tables option to see if it starts successfully:

sudo systemctl start mysql

Hope that this helps!

I didn’t omit any part, I found that when you are logged into the root account of the operating system, mysql no longer asks to enter the password of the root account of mysql.

alexdo
Site Moderator
Site Moderator badge
May 31, 2024

There is a simple solution to login automatically, it’s to set your credentials in a file named .my.cnf in your user’s home directory.

nano ~/.my.cnf

And set your MySQL credentials like in the following example :

[client]
user = root
password = password

Then just use the command mysql to login into MySQL instead of mysql -u root -p. It also provide you the ability to use the other commands available with mysql-client like mysqldump or mysqladmin.

Regards

Thanks for your article, This is a very useful post for us. For information only, Other may users also have a look at this link http://www.ipragmatech.com/forgot-mysql-root-password, this link also contains very easy step to reset the password.

I dunno, this didn’t work for me.

For Step 2, the server is using MariaDB but none of the mariadb-specific commands worked. Also it doesn’t know what ‘systemctl’ is. I figured out though that I could stop the database with ‘sudo service mysql stop’ - that definitely stopped the service.

In Step 3, ‘sudo mysqld_safe --skip-grant-tables --skip-networking &’ did something, but it didn’t kick me back to the command line. Although I didn’t have to ctrl-c it either, just when I tried typing the next bit was when the new line appeared. Don’t know if that’s a problem or not, I’m just not used to command line stuff.

In Step 4, ‘FLUSH PRIVELEGES;’ said the query was ok, but 0 rows affected. Then again, I don’t know if this is supposed to affect any rows. Next, the recommended way of changing the password did not work. I used the method where it says it’s indicative of bigger problems (whatever that means), and that did work and affect 1 row. Or it didn’t work because the guide says it should say 0 rows affected?

For Step 5, neither of the sudo kill commands worked. And of course the systemctl commands don’t work to restart the database, so I did ‘sudo service start mysql’. It said MariaDB started.

Then I tried the final step with ‘mysql -u root -p’ but it says the password is wrong. So I don’t know what I changed (if anything) but yeah, the guide didn’t work for me. At least I don’t have the same problems as NUCUTA?

Edit: I managed to change the password following Rackspace’s guide (https://support.rackspace.com/how-to/mysql-resetting-a-lost-mysql-root-password/). It’s almost the same, don’t know if the different order of mysql commands made a difference. I still used my own commands to start/stop the mysql service though - ‘sudo service mysql start’ or ‘sudo service mysql stop’

I had the same problem when I forgot one of my MySQL instance root password. I reset it using this guide.

https://www.fossgeek.org/server-configuration/reset-mysql-root-password/

It’s working fine & In my case I had a CentOS 6 box. :)

alexdo
Site Moderator
Site Moderator badge
May 31, 2024

Thanks for sharing this information as other users might find it just helpful if they run into the same situation.

Regards

This comment has been deleted

    Amaizing tutorial partner, rly! Thanks you so much…

    Thank you the tutorial was actually very helpful.

    I just have one question, in step 4 there is a note saying: “Note: If the ALTER USER command doesn’t work, it’s usually indicative of a bigger problem.”

    What’s the bigger problem that’s mentioned and how can i solve it.

    alexdo
    Site Moderator
    Site Moderator badge
    May 31, 2024

    The note about the ALTER USER command not working and indicating a bigger problem typically suggests that there might be underlying issues with your MariaDB installation or configuration. Here are some potential reasons why the ALTER USER command might fail and how you can address them:

    1. Incorrect Syntax: Double-check the syntax of the ALTER USER command to ensure that it is correct. Any typos or syntax errors can cause the command to fail. Pay attention to quotation marks, semicolons, and other syntax elements.

    2. Insufficient Privileges: You need the appropriate privileges to execute the ALTER USER command. Make sure you are logged in as a user with the necessary privileges, such as the root user or another user with the ALTER USER privilege.

    3. Socket Authentication: If your MariaDB installation is configured to use socket authentication for the root user, you might encounter issues when trying to set a password using the ALTER USER command. In such cases, you may need to switch to native authentication first using the mysql_native_password authentication plugin.

    4. Database Corruption: In some cases, database corruption or other issues with the MySQL/MariaDB installation can prevent the ALTER USER command from working properly. You can try repairing the database or reinstalling MySQL/MariaDB to resolve any underlying issues.

    5. Permissions and Ownership: Ensure that the MySQL/MariaDB data directory and files have the correct permissions and ownership. Improper permissions can prevent MariaDB from executing certain commands, including ALTER USER.

    6. Version Compatibility: Make sure that the version of MariaDB you are using supports the ALTER USER command. Older versions may not support certain features or syntax used in the command.

    If you encounter issues with the ALTER USER command, carefully review any error messages or warnings that are returned. These messages can provide valuable information about the underlying problem.

    Regards

    In Step 5, to prevent mysql> from freezing, it’s best to write: quit or \q and then restart: 'sudo systemctl start mysql, instead of writing: sudo kill cat /var/run/mysqld/mysqld.pid

    On the other hand I need to issue sudo kill $(sudo cat /var/run/mysqld/mysqld.pid) or actually sudo kill (sudo cat /var/run/mysqld/mysqld.pid) since my default shell is fish.

    Join the Tech Talk
    Success! Thank you! Please check your email for further details.

    Please complete your information!

    Become a contributor for community

    Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

    DigitalOcean Documentation

    Full documentation for every DigitalOcean product.

    Resources for startups and SMBs

    The Wave has everything you need to know about building a business, from raising funding to marketing your product.

    Get our newsletter

    Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

    New accounts only. By submitting your email you agree to our Privacy Policy

    The developer cloud

    Scale up as you grow — whether you're running one virtual machine or ten thousand.

    Get started for free

    Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

    *This promotional offer applies to new accounts only.