Sunday, May 14, 2006

 

mysql root password, again

Many distributions of Linux have an option to install MySQL. In this case, or even if you compile MySQL, the default password is blank. MySQL can also run on Windows. When you install MySQL, make sure that you set the root password. You can do this:

user@host:/home# mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 3.23.47

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> SET PASSWORD FOR root@localhost=PASSWORD('newpass');
Query OK, 0 rows affected (0.06 sec)

mysql>



In this example, we set the root password to newpass. Note from the above that the password wasn't set. If we try this again, we need to use the -p option to enter the password:

user@host:/home# mysql -u root mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
user@host:/home# mysql -u root -p mysql
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3 to server version: 3.23.47

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>



To reset a root password that you forgot...

[root@host root]#killall mysqld
[root@host root]#/usr/libexec/mysqld -Sg --user=root &



You may have better luck with:

mysqld --skip-grant-tables --user=root



Go back into MySQL with the client:

[root@host root]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 3.23.41

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> UPDATE user
-> SET password=password("newpassword")
-> WHERE user="root";
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
[root@host root]#killall mysqld



Start MySQL the normal way for your system, and all is good. For RedHat/Debian this is:

/etc/init.d/mysqld start

This page is powered by Blogger. Isn't yours?