zabbixのMySQLデータをダンプから戻す
現状運用しているzabbixが1.8。ちょいと古いので2.4へアップデートしようとしたんですが、お約束のように作業中にMySQLDBを壊しちゃいました。
当然dumpはとっているのでそこから戻そうとしたんですが、まぁこれがめまいがするほど遅い。なにが遅いって、historyテーブル。運用すでに3年になりたまりにたまったデータは177921599行。えーと、1.8億か。パキスタンの人口よりちょっと多いくらい。
mysqldumpが吐き出したファイルをのぞくと、ちゃんとbulk insertの形式にはなっているんですがそれでも遅い。12時間で半分くらいしかinsertできなかった。
なので途中でinsertを中断してLOAD DATA INFILEを使ってリストアすることにする。
ダンプファイルからhistoryデータを抜き出す。
# grep 'INSERT INTO `history`' zabbix.dmp > history.dmp
また逆(historyデータが含まれていないデータ)のファイルも作成する。
# grep -v 'INSERT INTO `history`' zabbix.dmp > withouthistory.dmp
historyのダンプファイルからcsvを作成する
上記で作成したhistoryデータが含まれているダンプデータの形式はこんな感じ。
INSERT INTO `history` VALUES (xxx,xxx,xxx),(yyy,yyy,yyy),(zzz,zzz,zzz) …(中略);
s/INSERT INTO `history` VALUES //g s/),/)\ /g s/;//g s/[()]//g
# sed -f ./mm.sed history.dmp > history.csv
history以外のデータをmysqlでデータベースへ投入する。
# mysql -uroot -p zabbix < ./withouthistory.dmp
これだけでも結構な時間がかかる。二時間弱。
hitoryデータを投入。
mysql> LOAD DATA LOCAL INFILE 'history.csv' INTO TABLE history FIELDS TERMINATED BY ',';
と、いまのところ三時間が経過していますが、マダ終わらない。はやいんだろうか。