• このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

こんにちは、開発部山田です。
朝晩寒くなってきましたね。皆さんいかがお過ごしでしょうか。

今回は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の操作が可能になるでしょう。

アクセス拒否エラーに遭遇したら是非一度参考にしてください。

以上、山田でした。