2010年6月3日木曜日

mysqlでログインできなくなった

どうも、俺@仕事中です。
今日は開発環境のmysqlサーバへログインできなくなってしまった場合の対処法です。

rootログインも一般アカウントログインもできません。
# mysql -u root
Access denied for user: 'root@localhost' (Using password: NO)
# mysql -u mysql_user
Access denied for user: 'mysql_user@localhost' (Using password: NO)
もちろんパスワードの設定などもしていませんでした。

権限テーブルで何か異常が発生してるのだろう、、と確認したいのですが、mysqlデータベースにすら接続できません。

1)無理やりログインできるようにする
mysqlを立ち上げる際に
# mysqld_safe --skip-grant-tables & 
とやれば権限テーブルを無視してログインできます。
mysql> use mysql
mysql> select * from user;
Empty set (0.00sec)
あじゃぱー!!
userテーブルが空になっちょる!誰やー!?

この状態で
mysql> grant all on *.* to root@localhost;
と打っても「--skip-grant-tablesオプション付けて起動してるからGRANTできひんでー」と怒られます。

2)他のサーバからuserテーブルデータを持ってきた
仕方がないので、他サーバで稼働中のuserテーブルデータをそのまま持ってきてdataディレクトリへ置きました。
# cp user.MYD user.MYI user.frm /usr/local/mysql/data/mysql/
これで通常起動すれば普通に接続できるようになりました。


うむむ、--skip-grant-tablesオプションでログインできるようになったはいいけど、その後GRANT構文を放り込みたい場合はどうしたら良いのでしょう、、?


以上でぇぇぇえぇす。

0 件のコメント: