#経緯
MySQLでrootパスワードを紛失したり、またはパスワードが行方不明になったりしたとき、MySQLへの接続が出来なくなった....そんなときに
このようなエラーを見かけます...
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
#セーフモード(mysqld_safe)で起動
1.サーバーストップ
$ mysql.server stop
2.セーフモードでの起動、
$ mysqld_safe --skip-grant-tables &
3.パスワードなしでログインできる
$ mysql -u root
##パスワードを空にする
mysql > UPDATE mysql.user SET authentication_string=null WHERE User='root';
#ではrootパスワードを変更します
今まで通りこのようなコマンドで変更しようとしたところ、
//失敗例1
mysql > update mysql.user set password=password('hogehoge') where user = 'root';
//失敗例2
mysql > SET PASSWORD FOR root@localhost=PASSWORD('hoge');
//結果
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('root')' at line 1
このように文法エラーという結果が帰ってきます。
#PASSWORD() 関数は、MySQL version 5.67 までで廃止
MySQL 8 においては、そもそも関数が存在しないようです。
*下記のコマンドでパスワードを変更
1. MySQL再起動(非セーフモード)
$ mysql.server restart
2. 空のパスワードでログイン
$ mysql -u root -p
enterでパスなしでログイできる
3.パスワード変更
mysql > USE mysql;
mysql > ALTER USER 'root'@'localhost' identified BY '自分の決めるパスワード';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0C
変更できました。