【メモ】ローカルのMySQLにrootでログイン出来なくなったら

mysql_logo.png

動作確認のためにVagrant上にインストールしたMySQLにrootでログイン出来なくなってしまいました。


ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


メインで使っていない開発環境の方なので、きちんとパスワードを設定したかも疑わしい。普段使っている限りではrootでログイン出来なくても別に困らないんですが、DBユーザーに十分な権限が割り当てられていなくて、テーブル作成すらできないことがわかったのでなんとかしないといけない。

仕方が無いので、次の手順でrootのパスワードを再設定し、ローカルホストからのアクセスに権限を付与したたところ、ログイン出来るようになりました。
(パスワードを設定したつもりでしてなかったのかも)



環境

  • CentOS 7
  • MySQL 5.6



手順

$  sudo vi /etc/my.cnf

mysqld に skip-grant-tables を追記

$ sudo service mysqld restart
$ mysql -u root

mysql > use mysql;
mysql > UPDATE `user` SET `authentication_string` = PASSWORD('password') WHERE `user` = 'root';
mysql > flush privileges;
mysql > grant all privileges on *.* to root@localhost identified by 'password' with grant option;
mysql > flush privileges;
mysql > quit

$ sudo vi /etc/my.cnf

skip-grant-tables を削除

$ sudo service mysqld restart
$ mysql -u root -p



嵌まった点

  • CentOS7で上手くMySQLをセーフモードで起動出来なかったので、my.cnfに追記しました。多分なんか方法があるはずです。
  • パスワードを設定したあと、権限の変更を行おうとしたら、skip-grant-tablesが設定されてるからダメだと怒られました。が、 flush privileges してから変更したら上手く出来ました。それでいいのか……



なにはともあれ、何とかログイン出来るようになってよかった。そもそも、ログイン用のユーザーに適切な権限を設定しておけばこんな面倒なことにはならなかったんですけどね。まあいいか。ローカルだし。