とあるwebサーバで障害発生!応答がないから強制リセット再起動!
なんか挙動が怪しいから別サーバに引っ越そうぜ!
ということでバックアップを取ります.
# mysqldump -u hoge -p hoge > dump.sql
mysqldump: Got error: 1146: Table 'hoge.fuga' doesn't exist when using LOCK TABLES
あれ,ロック時にfugaが無いとか意味不明なことを…
とりあえずロックなしでも問題なさげなのでさらに指定.
# mysqldump -u hoge -p hoge --skip-lock-tables > dump.sql
Error: Couldn't read status information for table fuga ()
mysqldump: Couldn't execute 'show create table `fuga`': Table 'hoge.fuga' doesn't exist (1146)
あれ,やっぱりfugaが無いんじゃないの.
/var/lib/mysql/hoge/の中をを見てみると,他のテーブルはみんな *.frm, *.MYD, *.MYIの3ファイルセットなのに,fugaだけfuga.frmしかない.
phpMyAdminで見るとテーブル一覧にfugaが無い.
コマンドラインのmysqlからshow tablesするとfugaはある.
どうもリセット時に飛んじゃったっぽいですね.
幸い,頻繁に更新するテーブルじゃなかったので,1ヶ月前のバックアップから中身を取り出せます.
しかしこのエラーのおかげでmysqldumpが完走しない.
ということで,とりあえず/var/lib/mysql/hoge以下を全コピー.
別サーバに持って行きます.
別サーバのmysql上,同名でDB作成.
mysqldを止めて,旧サーバから持ってきたファイルを上書きします.
中途半端なfrmだけのテーブル用ファイルは削除.
1ヶ月前のバックアップから該当テーブルのSQLを流し込んで一応復旧.
しかしこのままだとなんか不安が残るので,あらためて全文をdumpしてから再度流し込み.
その後は特に問題なく動いているようです.