[+/-]
If you have never set a root password for
MySQL, the server does not require a password at all for
connecting as root. However, it is
recommended to set a password for each account. See
Section 5.3.1, “General Security Guidelines”.
If you set a root password previously, but
have forgotten what it was, you can set a new password. The
next two sections show procedures for Windows and Unix
systems, respectively.
Use the following procedure for resetting the password for
any MySQL root accounts on Windows:
Log on to your system as Administrator.
Stop the MySQL server if it is running. For a server that is running as a Windows service, go to the Services manager:
Start Menu -> Control Panel -> Administrative Tools -> Services
Then find the MySQL service in the list, and stop it.
If your server is not running as a service, you may need to use the Task Manager to force it to stop.
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 and
FLUSH statements each must be written
on a single line. The UPDATE
statement resets the password for all existing
root accounts, and the
FLUSH statement tells the server to
reload the grant tables into memory.
Save the file. For this example, the file will be named
C:\mysql-init.txt.
Open a console window to get to the command prompt:
Start Menu -> Run -> cmd
Start the MySQL server with the special
--init-file option:
C:\> C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txt
If you installed MySQL to a location other than
C:\mysql, adjust the command
accordingly.
The server executes the contents of the file named by
the --init-file option at startup,
changing each root account password.
You can also add the --console option
to the command if you want server output to appear in
the console window rather than in a log file.
If you installed MySQL using the MySQL Installation
Wizard, you may need to specify a
--defaults-file option:
C:\>"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe"--defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini"--init-file=C:\mysql-init.txt
The appropriate --defaults-file setting
can be found using the Services Manager:
Start Menu -> Control Panel -> Administrative Tools -> Services
Find the MySQL service in the list, right-click on it,
and choose the Properties option. The
Path to executable field contains the
--defaults-file setting.
After the server has started successfully, delete
C:\mysql-init.txt.
Stop the MySQL server, then restart it in normal mode again. If you run the server as a service, start it from the Windows Services window. If you start the server manually, use whatever command you normally use.
You should now be able to connect to MySQL as
root using the new password.
MySQL Enterprise. For expert advice on security-related issues, subscribe to the MySQL Enterprise Monitor. For more information, see http://www.mysql.com/products/enterprise/advisors.html.
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 either
mysqld or your system's hostname.
You can stop the MySQL server by sending a normal
kill (not kill -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 of cat to be substituted into
the kill 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 and
FLUSH statements each must be written
on a single line. The UPDATE
statement resets the password for all existing
root accounts, and the
FLUSH 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 each root 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.

User Comments
If you upgrade from MySQL 3 to MySQL 4.1 without updating Grant Tables, MySQL uses the old password hashing mechanism by default.
But if you start it with '--skip-grant-tables' it uses the new password hashing mechanism!
To be able to reset your root password, you must add the '--old-passwords' option, e.g.:
mysqld_safe --skip-grant-tables --old-passwords &
On Windows installations, it is also possible to disable grant table loading and restart the server using the MySQL System Tray Monitor (the relevant option is under Configure Instance->Startup Variables->Security).
I got all sorts of unhelpful error messages when trying to reset the root password on the console as described, but using the System Tray monitor and the graphical MySQL Administrator worked flawlessly.
If you use PhpMyAdmin, don't forget to edit config.inc.php to match your new password as well, even if this doesn't fit on the mysql-site, it is still worth mentioning. At least it haunted me for 30 stressful minutes.
Make sure you have your InnoDB Base Directory and Data Directory path's correct or you will continue to get this error. "Error 1045 Access denied for 'root'@'localhost'[using password: Yes] "
If you have InnoDB set up you must have the correct path to these two directories in MySQL.
I've learned the hard way for the last several years on similar errors.
Oh, Also please understand, that [using password: Yes] does not necessarily mean you are using the wrong password.
You might need to allow mysqld-nt.exe from your FireWall or your Virus Software has an inbound FireWall setup or you do not have Administrative rights to do this installation (if you are installing for first time.)
Hope this helps someone.
Blessings,
Chetanji
Add your own comment.