Move on MySQL now! from HDD failed system… (mysqldumpがerrorcode 30で死ぬ件について)

自宅サーバ、そろそろ自宅やめてさくらVPSにしようと思い立ってさくらのVPSを契約し1年経った。使ってないのに1年経った、アホい。アホイ道選手権大会なので、最近出た東京リージョンのSSDプランへ変更(というか契約しなおし)構築を開始した。

  • いままで: samidare.kerox.info
  • これから: yukizuki.kerox.info

ちなみに、自宅サーバのHDDはこわれそうらしくって、1年ぐらい read only化されている。つまり、読み取り専用で1年も稼働していたのだ。がんばるナァ!関心!

面倒くさいので、su して全部rootで実行;
(伝統的に -pのあとのパスフレーズにスペース入れない)

# mysqldump -u root -x --all-databases -punkounko | gzip | ssh sakadon@yukizuki.kerox.info 'cat > ~/dump.sql.gz'

local には書き込めないので、すべての標準出力をsshで引越し先にぶち込んでいる。mysqldumpしてデータベースを引っ越す。CentOS7ではmariadbに変更となったが直接打ち込む分には問題無さそう?(まだ問題が表面化してないだけかもしれない)

ちなみに、readonly化されているので、mysqldumpがtmpファイルを作成できずに;

mysqldump: Couldn't execute 'show fields from `cdef`': Can't create/write to file '/tmp/#sql_c89_0.MYI' (Errcode: 30) (1)

などと宣う。ちょっとこれは回避方法がない。USBフラッシュメモリなどを指してmntし、そちらに回すなどするしかない様子。しかし調べてみたら、昔の自分が違うHDDを本体にぶっさしていたようで、そっちは書き込める。

[root@samidare backup]# fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 19457 156288321 8e Linux LVM

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdb1 * 1 13 104391 83 Linux
/dev/sdb2 14 121601 976655610 8e Linux LVM

sdbが多分それ。助かったね!!!serverfaultを参考に以下のように回避

# export TMPDIR=/backup/rescuetmp ; mysqldump -u root -x --all-databases -punkounko > /backup/rescuetmp/backup.sql

だめだ、うまくいかない。dump途中でerrcode 30で止まる。仕方ないので、remountでrw復旧出来ないか試す。

[root@samidare backup]# mount -o remount,rw /dev/mapper/VGmain-mainSlash 
mount: ブロックデバイス /dev/mapper/VGmain-mainSlash は書き込み禁止です、読込み専用でマウントします

fmfm、知ってるわボケ!!!!こちらを参考にfsckでぐるぐるする。

[root@samidare backup]# umount /dev/mapper/VGmain-mainSlash 
[root@samidare backup]# fsck -t ext3 /dev/mapper/VGmain-mainSlash
...

なんか/dev/mapper/を含むのか含まないのかわからないが、どっちも試したがどうもうまくいかない。堂々巡り感が強くなってきており、打開策が見当たらない。うんこ

ここで再起動させる。一か八か、な感じで。

…とおもい、復活してきたので、mysqldumpしたらdump出来た!!やったーーーーー!!よくわからんけど今のうちだ!

# mysqldump -u root -x --all-databases -punkounko > /backup/rescuetmp/backup.sql

とりあえず、問題ない領域へ出して対処する。(そのあと、↑にだしていたsshでdumpも実行しといた。何事も一歩ヅツ…)

というとで、こんなことに成る前にbackupを定期的に取るか、もしくはロードアヴェレージがすばらしい器機で構築するか、黙ってAWS RDS使ってろってこったな。まあ、さくらのVPSもハードウェア自体はかなりお金掛けてるんでしょうし、論理構成されてるだろうから、不安はグッと下がりますね。

新環境yukizuki.kerox.infoでは以下のようにしてぶっこみ。

# gzip -d backup.sql.gz
# mysql -u root -p < backup.sql

よかったね

(30分後追記)やはりfsck効いたようで、/dev/mapper/VGmain-mainSlash/がrwマウントされている。fsck -t 馬鹿にせず撃ちまくり、再起動をする度胸を試したことにより、成功を手にしたのだ。終わり