MySQLでの「Access denied for user ‘root’@’localhost’ (using password: NO) 」への対処

MySQLをインストールした直後に、私も遭遇しましたが、rootユーザの権限設定がされていなく、下記のようなエラーが発生することがあるようです。

[root ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ここでは、その場合の対処方法を整理しておきます。

1.MySQLの停止

MySQL(mysqld)が稼働している場合には、一旦停止します。

[root ~]# service mysqld stop
mysqld を停止中:                                           [  OK  ]
2.オプション付きで起動

MySQLを–skip-grant-tablesオプション付きで起動します。
このオプションはMySQLの権限システムを使用しないで起動するためのものです。

[root ~]# mysqld_safe --skip-grant-tables &
3.mysqlコマンドプロンプトに入る
[root ~]# mysql -u root
(メッセージ略)
mysql> 

今度は入れると思います。

4.rootへの権限設定

まずは、現状の権限設定を確認してみます。

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)

パスワードを設定しない場合には次のような実行文になります。

mysql> grant all privileges on *.* to root@localhost identified by '' with grant option;
Query OK, 0 rows affected (0.01 sec)

実行結果を確認します。

mysql> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+
1 row in set (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  ]
6.エラー解消の確認

最後に、遭遇したエラーが解消されていることを確認します。

[root ~]# mysql -u root -pパスワード 
(メッセージ略)
mysql> 

Comments are closed.