Use the following procedure for resetting the password for any MySQL root
accounts on Unix. The instructions assume that you will start the server so that it runs using the Unix login account that you normally use for running the server. For example, if you run the server using the mysql
login account, you should log in as mysql
before using the instructions. (Alternatively, you can log in as root
, but in this case you must start start mysqld with the --user=mysql
option. If you start the server as root
without using --user=mysql
, the server may create root
-owned files in the data directory, such as log files, and these may cause permission-related problems for future server startups. If that happens, you will need to either change the ownership of the files to mysql
or remove them.)
Log on to your system as the Unix
mysql
user that the mysqld server runs as.-
Locate the
.pid
file that contains the server's process ID. The exact location and name of this file depend on your distribution, hostname, and configuration. Common locations are/var/lib/mysql/
,/var/run/mysqld/
, and/usr/local/mysql/data/
. Generally, the filename has an extension of.pid
and begins with eithermysqld
or your system's hostname.You can stop the MySQL server by sending a normal
kill
(notkill -9
) to the mysqld process, using the pathname of the.pid
file in the following command:shell>
kill `cat /mysql-data-directory/host_name.pid`
Note the use of backticks rather than forward quotes with the
cat
command; these cause the output ofcat
to be substituted into thekill
command. -
Create a text file and place the following statements in it. Replace the password with the password that you want to use.
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;The
UPDATE
andFLUSH
statements each must be written on a single line. TheUPDATE
statement resets the password for all existingroot
accounts, and theFLUSH
statement tells the server to reload the grant tables into memory. Save the file. For this example, the file will be named
/home/me/mysql-init
. The file contains the password, so it should not be saved where it can be read by other users.-
Start the MySQL server with the special
--init-file
option:shell>
mysqld_safe --init-file=/home/me/mysql-init &
The server executes the contents of the file named by the
--init-file
option at startup, changing eachroot
account password. After the server has started successfully, delete
/home/me/mysql-init
.
You should now be able to connect to MySQL as root
using the new password.
Alternatively, on any platform, you can set the new password using the mysql client (but this approach is less secure):
Stop mysqld and restart it with the
--skip-grant-tables
option.-
Connect to the mysqld server with this command:
shell>
mysql
-
Issue the following statements in the mysql client. Replace the password with the password that you want to use.
mysql>
UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->WHERE User='root';
mysql>FLUSH PRIVILEGES;
You should now be able to connect to MySQL as root
using the new password.