MySQLユーザテーブル異常時のリストア。

宅内ネットワークを監視しているZabbixのパフォーマンスがだんだん遅く感じるようになった。
パフォーマンスチューニングをしていないUbuntuのMySQLのデフォルト設定で、それなりの監視項目を監視していれば当然といえば当然の結果か。
幸いうちの実験サーバのリソースはまだ結構余っているようだったので、mysqldump でフルバックアップを取ってからデータベースファイルをすべて削除し、チューニング後の設定で各種ファイルを作り直すことにした。

# service mysql stop
# rm -f /var/lib/mysql/*
# mysql_install_db
# service mysql start

ここまでの手順でMySQLを起動することができはしたのだが、いざ mysqldump で取得したバックアップをリストアしようというところで問題が発生した。
通常であればMySQLデータベース新規作成後はパスワードなしでrootユーザによるデータベースアクセスが可能なはずなのだが、今回は何度試してもアクセスができなかった。
おかしいと思ってログを調べてみると以下のようなメッセージが出ていた。

ERROR: 1146  Table ‘mysql.tmp_user’ doesn’t exist

本来はあるはずのユーザ関係らしきテーブルがない、ということらしい。
仕方がないので一旦MySQLサーバのプロセスを停止させて、mysqld_safe を起動してユーザ、パスワードフリーでアクセスできる状態にして調査を続行した。

# mysqld_safe –user=root –skip-grant-tables &
# mysql mysql

user テーブルを検索してみると、テーブルの中身が空っぽになっていた。
どうりでユーザ認証ができないわけだ。
幸いなことにこの状態でもバックアップデータのリストアは可能だったので、今回の作業前に取得したバックアップデータを流し込んで再起動したら無事正常にアクセスできるようになった。
Zabbixのパフォーマンスも改善されたし、とりあえず一件落着。

参考情報:
http://www.netcube.ne.jp/wiki/db/mysql%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AE%E5%BE%A9%E6%97%A7%E6%96%B9%E6%B3%95


投稿日

カテゴリー:

,

投稿者:

タグ:

コメント

コメントを残す