読者です 読者をやめる 読者になる 読者になる

NeverBlog::Likk::Unexistable;

見なかったことにして下さい

LOAD DATA INFILE を使った MySQLのデータインポート

一年に一回やるかやらないかぐらいの頻度で、毎回ググって回ってるので備忘録。

mysqldump -u user -p --default-character-set=utf8 --lock-tables --single-transaction database table > table.sql
gzip table.sql
scp table.sql.gz new-server:/tmp/
ssh new-server
cd /tmp
zcat table.sql.gz | mysql -u user -p database

基本この流れで問題ないんだけど、千万件辺りからいつまでたっても終わらなくなる感じになるので、LOAD DATA INFILE を使うようにする。

SELECT * INTO OUTFILE '/tmp/table.tsv' FROM table

で書き出して

LOAD DATA INFILE '/tmp/table.tsv' INTO TABLE table;

で読み込む。

必要であれば読み込む前に以下をやっておく

SET foreign_key_checks=0;
SET sql_log_bin=0;
SET unique_checks=0;
SET @@character_set_database=binary

あと、基本だけどこの手の時間がかかる作業はscreenなりtmuxなりやっておかないと、悲しい気持ちになります。

手元にあるデータは新たに更新されることは無いので、最近は昔に書きだしたtsvを再インポートするだけになっている。



参考元:

もっとクソでかいデータを扱う時:
参考先のmaatkitとfifoを使う



次に実行する時に、毎度参考サイトが有るとは限らないのでアーカイブしておきたい所。