MySQL Reset Root Password

by on April 6, 2009 · 16 comments· last updated at April 6, 2009

I forgot the MySQL root password. How do I reset MySQL root password?

It is possible to reset the root password. Use the following procedure for resetting the password for any MySQL root accounts on Unix / Linux / BSD like operating systems.

You need to login as root user under UNIX / Linux.

Step # 1: Stop MySQL

Type the following command to stop mysql server under RHEL / Fedora / CentOS Linux:
# /etc/init.d/mysqld stop
Use the following command if you are using FreeBSD:
# /usr/local/etc/rc.d/mysql-server stop
Use the following command if you are using Debian / Ubuntu Linux:
# /etc/init.d/mysql stop
Alternatively, you can stop the MySQL server by sending a kill to the mysqld process, using the path name of the .pid file in the following bash specific command:
# kill $(cat /var/run/mysqld/mysqld.pid)
OR
# pgrep -u mysql mysqld
# kill PID

Or, simply use killall command under Linux:
# killall mysql

Step # 2: Create new mysql password sql script

Create a sql file called /root/mysql.reset.sql as follows (replace YOUR-NEW-MYSQL-PASSWORD with actual new password you would like to use):
# vi /root/mysql.reset.sql
Append the following code:

UPDATE mysql.user SET Password=PASSWORD('YOUR-NEW-MYSQL-PASSWORD') WHERE User='root';
FLUSH PRIVILEGES;
 

Save and close the file.

Step # 3: Set new mysql root password

Type the following command:
# mysqld_safe --init-file=/root/mysql.reset.sql &
Sample output:

nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[20970]: started

And you are done with resetting operation. Simply, stop server and start again:
# killall mysqld
# /etc/init.d/mysql start



You should follow me on twitter here or grab rss feed to keep track of new changes.

Featured Articles:

{ 16 comments… read them below or add one }

1 yoander (sedlav) April 6, 2009 at 1:39 pm

In RHEL / Fedora / CentOS Linux yun can type also service mysqld stop

Reply

2 Raheem April 6, 2009 at 4:35 pm

Thank you ! Nice piece of info.
In fact, my colleague did the most stupid thing of his life yesterday by deleting all the users in the mysql table :(
I did get back everything by simply altering the commands in the above given example to insert a user called root, then granting permission to all databases, reset its password etc.

Reply

3 Mihai Secasiu April 6, 2009 at 4:58 pm

Or you could simply stop mysql then start it without privilege checking like this:
mysqld –skip-grant-tables
connect to it as root, run that update query, then kill the server and start it normally

Reply

4 Vivek Gite April 6, 2009 at 5:04 pm

mysqld –skip-grant-tables method is considered as insecure and in some case it may corrupt the data.

HTH

Reply

5 dardo April 6, 2009 at 8:15 pm

Excuse me for my bad English, I usually read it all time but rather speak or write it.

Thanks for share this method.

I install mySQL on my NSLU2 this weekend and with the Debian default install there are no root user, but the debconf ask it’s password twice at install time.

I use the skip-grant-tables method, but i was thinking on more secure ways to do it because withe the skip-grant-tables any user potentially can take the control of your databases.

Reply

6 micman April 11, 2009 at 2:59 pm

thanks :)

Reply

7 GaQuay April 16, 2009 at 12:00 am

for gui, you can use webmin, it so easy for change password mysql :)

Reply

8 Frank Wang April 20, 2009 at 2:07 pm

Thanks, very nice instruction. A little typo at the end:
“# /etc/init.d/mysql start” should be “# /etc/init.d/mysqld start”

Reply

9 V.Balaviswanathan April 21, 2009 at 9:30 am

Thanks a lot for the tips that you have provided and I would like to know the same for debian and Ubuntu systems as in Ubuntu there is no root login as such right?

Reply

10 Vivek Gite April 21, 2009 at 12:44 pm

@V.Balaviswanathan,

MySQL has root user too. Do not confuse it with system root user (to become root user Ubuntu enter sudo -s).

@ Frank,
/etc/init.d/mysql or /etc/init.d/mysqld depends upon your distro.

Reply

11 V.Balaviswanathan April 21, 2009 at 12:52 pm

Thanks a lot Vivek for the tip that you have provided :)

Reply

12 Antony Dick M. May 22, 2009 at 7:21 am

When there is a crash in connecting the MySQL Database do the following procedures

To Stop:
etc/init.d/mysql stop

To Start:
etc/init.d/mysql start

To Restart:
etc/init.d/mysql restart

To Reset The Password:
/etc/init.d/mysql reset-password

To Make Your Database To Get Connected When You Are In A Network:
gedit /etc/mysql/my.cnf
//search for bind address and then
change bind address 0.0.0.0

Reply

13 rizky June 5, 2009 at 10:50 pm

whoa that’s cool dude

Reply

14 Camilo September 19, 2010 at 11:40 pm

I use Fedora 12 and It doesn’t work for me.

Reply

15 Paul Jardine March 17, 2012 at 8:11 am

I had problems in Ubuntu, due to apparmor preventing mysql from reading sql files from the root directory.
Placing the init-file in /usr/share/mysql directory solved the problem. Or you can look at /etc/apparmor.d/usr.sbin.mysqld

Reply

16 jenie April 24, 2012 at 2:51 pm

I NEED THE CURRENT PASSWORD FOR ROOT IN XAMPP INORDER TO CHANGE MY PASSWORD.

THANK YOU!

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <kbd> <blockquote> <pre> <a href="" title="">

Tagged as: , , , , , , , , ,

Previous Faq:

Next Faq: