タイトル通りです。
MySQL5.6サーバーに接続時、ERROR 1045 (28000)が発生した際の対処方法をご紹介します。
エラー詳細
前提
- rootにパスワードを設定していたかどうか定かでない。
- 作業環境はAWS Cloud9。
エラーメッセージ
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
エラー発生時の実行コマンド
$ mysql -u root
解決方法
概要
- MySQLサーバーをユーザーの権限テーブルをスキップするオプションにてセーフモードで起動。
- rootでログイン出来るようにするため自身のパスワードを再設定。
- MySQLに接続し直し、権限テーブルを更新。
流れ
以降の1から順に記述してあるコマンドを実行していく想定です。
1. MySQLのpidファイル削除
# kill `cat /var/run/mysqld/mysqld.pid`
2. MySQLサーバーをセーフモードで起動
# mysqld_safe --skip-grant-tables &
権限テーブルを参照しないようにします。
これにより本来必要なはずの認証をスキップすることができ、アクセス出来ていなかったrootでアクセス出来るようになります。
3. rootのパスワードを任意のものに変更
# mysql -u root mysql> UPDATE user SET Password=PASSWORD('root') WHERE User='root'; mysql> quit;
4. MySQLサーバー再起動
$ sudo service mysqld restart # mysql -u root -p
MySQLサーバー接続時のrootパスワードは変更したものを指定します(上記例だと root )。
5. 権限テーブルを更新
mysql> update mysql.user set password=password('') where user='root' and host='localhost'; mysql> flush privileges;
エラー発生時に実行していたコマンド、 $ mysql -u root にてMySQLサーバーに接続出来るようにするためパスワードなしでログイン出来るように変更します。
最後に、権限の変更を反映させるため flush privileges を実行し手順完了となります。
お役にたちましたら幸いです。