MySQL で Can’t create new tempfile と出たら権限を確認する

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 125 21:56 fuga.TMD

権限を mysql に戻します。

1
chown mysql fuga.TMD

これで REPAIR TABLE をしたらいつも通り復元を開始できました。

コメント

コメントは受け付けていません。