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) …(中略);

以下のsedスクリプトcsvへ変換する。

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 ',';

と、いまのところ三時間が経過していますが、マダ終わらない。はやいんだろうか。