こんにちは、開発部山田です。
朝晩寒くなってきましたね。皆さんいかがお過ごしでしょうか。
今回はDockerなどで環境構築していると稀に遭遇する、
「mysqlでroot権限が設定されていなときのエラー」についての対処法をご紹介します。
$ mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
rootユーザの権限設定がされていなく、上記のようなエラーが発生することがあるようです。
PHP StormなどのIDEや、sequel proなどのMySQL管理ツールでDBに接続できないときなども、rootユーザーの権限を疑ってみると良いかもしれません。
以下、手順になります。
1.MySQLの停止
既にMySQL(mysqld)が稼働している場合には一旦停止します。
[root@db /]# service mysqld stop
2.オプション付きで起動
次に、MySQLを–skip-grant-tablesオプション付きで起動します。
このオプションはMySQLの権限システムを使用しないで起動するためのものです。
[root@db /]# mysqld_safe --skip-grant-tables & [1] 2485 [root@db /]# 160920 06:50:46 mysqld_safe Logging to '/var/log/mysqld.log'. 160920 06:50:46 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
3.mysqlコマンドプロンプトに入る
コマンドプロンプトから実行するとこうなります。
[root ~]# mysql -u root (〜メッセージ省略〜) mysql>
4.rootへの権限設定
無事にMySQLに入れたところで、次は現状の権限設定を確認してみます。
mysql> use mysql; Database changed mysql> select * from user; Empty set (0.00 sec)
これはどのユーザーにもまだ権限が設定されていない状態になります。
ここでは一旦rootユーザーに全ての権限を付与してみます。
(また、下記ではuserテーブルを全件削除してから、設定を実行しています。)
mysql> truncate table user; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
5.MySQLの再起動(通常起動)
これでrootユーザへの権限設定ができましたので、MySQLを–skip-grant-tablesオプションなしで再起動(通常起動)します。
mysql> quit; [root ~]# kill -KILL [mysqld_safe のPID] [root ~]# kill -KILL [mysqld のPID] [root ~]# service mysqld start mysqld を起動中: [ OK ]
これでひとまずMySQLの操作が可能になるでしょう。
アクセス拒否エラーに遭遇したら是非一度参考にしてください。
以上、山田でした。