1. 概要
たまたま調べる機会がありましたので、備忘で・・・。
本項は「MySQL の root パスワード忘れた時」を参考にさせていただきました。
2. 対処
要はセーフモードで起動してパスワードを設定しなおすってことのようです。
以下、やってみたプラットフォームは FreeBSD です。
以下 root ユーザで
サーバの停止
> service mysql-server stop
Stopping mysql.
Waiting for PIDS: 2059.
セーフモードで起動
> /usr/local/bin/mysqld_safe --skip-grant-tables &
[1] 39613
2018-01-30T00:50:13.6NZ mysqld_safe Logging to '/var/db/mysql/vm.sing.ne.jp.err'.
2018-01-30T00:50:13.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
MySQL に接続してパスワードを設定
> mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost [(none)]> use mysql
Database changed
ここからのコマンドがバージョンによって変わってきます。
5.6 以前は
UPDATE USER SET PASSWORD=PASSWORD("パスワード") WHERE USER='root';
FLUSH PRIVILEGES;
でよかったらしいのですが、少なくともバージョン 5.7.21 では
UPDATE USER SET AUTHENTICATION_STRING=PASSWORD("パスワード") WHERE USER='root';
FLUSH PRIVILEGES;
なのです。
use mysql の続きでやってみます。
root@localhost [mysql]> UPDATE USER SET AUTHENTICATION_STRING=PASSWORD("パスワード") WHERE USER='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
root@localhost [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
root@localhost [mysql]> quit
Bye
MySQL を再起動します。
> service mysql-server restart
Stopping mysql.
Waiting for PIDS: 467812018-01-30T01:34:30.6NZ mysqld_safe mysqld from pid file /var/db/mysql/vm.sing.ne.jp.pid ended
.
Starting mysql.
[1] + 終了 /usr/local/bin/mysqld_safe --skip-grant-tables
設定したパスワードで接続できるか確認してみます。
> mysql -u root -p
Enter password: ← 設定したパスワードを入力
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost [(none)]>
無事変更できたようです。