MySQL のデータベースのテーブルがまた破損しました。今回修復しようとしたら権限が root になっていろいろと困ることになったのでメモ。
いつも通り以下のコマンドで復元をする。
1 2 | use hoge REPAIR TABLE fuga; |
40,000秒経っても解決できなかったので中断して別の手段で復元。
1 | quit |
myisamchk ユーティリティを使ってみる。
1 | sudo myisamchk -o /var/lib/mysql/hoge/fuga |
こうするとエラーが出ました。
1 2 | myisamchk: error: Can't create new tempfile: '/var/lib/mysql/hoge/fuga.TMD' MyISAM-table '/var/lib/mysql/hoge/fuga' is not fixed because of errors |
myisamchk ユーティリティで強制的に復元できるようなのでやってみる。
1 | sudo myisamchk -of /var/lib/mysql/hoge/fuga |
次の日起きても解決できていなかったので、REPAIR TABLE を2日くらい使ってみて試すしか無いかなと思ってもう一度試したら以下のようなメッセージが出るように。
1 2 3 4 5 6 | +-----------------+--------+----------+----------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------------+--------+----------+----------------------------------------------------+ | hoge.fuga | repair | error | Can't create new tempfile: './hoge/fuga.TMD' | | hoge.fuga | repair | status | Operation failed | +-----------------+--------+----------+----------------------------------------------------+ |
tempfile が作れませんというエラーが。そういえば myisamchk の時にも出ていたような気がします。というか、tempfile が作れないからあらゆる復元に失敗していたんじゃないかという仮説が。
40,000秒経っても解決できなかったので中断して別の手段で復元することに。
この時に既に問題が発生している可能性が御座います。
1 2 3 | su - cd /var/lib/mysql/hoge ls -la |
root になっているようです。
1 | -rw-r----- 1 root 2664075264 12月 5 21:56 fuga.TMD |
権限を mysql に戻します。
1 | chown mysql fuga.TMD |
これで REPAIR TABLE をしたらいつも通り復元を開始できました。
コメント