大きなデータベースの移動

タグ: MySQL
逆ジオコーディングのデータベースは、300万件を超えるレコードを持っている。こいつを移動するのは、なかなか時間がかかる。いつもは、phpMyAdminでエクスポートしたファイルをインポート(「ウェブサーバ上のアップロードディレクトリ」から)。

で、昨日、BK1で立ち読みしたMySQLの本でLOAD DATAの方がINSERTより速いようなことが書いてあったので試してみた。

TerminalでMySQLを操作したことなんてなかったので、そいつも実験。
sudo /usr/local/mysql/bin/mysql -p db名
でパスワードを入れると mysql> に変わる。でクエリーを書いていけばいいみたい。

で、まず元のデータベースからファイルをつくる。
SELECT * INTO OUTFILE '/xxx/xxx/file.txt' FROM table名;
file.txtのディレクトリはパーミッションを777にでもしておく。
これはすぐ終了。

で、ロードする。
LOAD DATA INFILE '/xxx/xxx/file.txt' INTO TABLE table名;

途中でターミナルを閉じちゃったので時間はわからなかったけれど2時間ぐらいで無事終了。

これぐらい時間がかかるなら、phpMyAdminのconfigでタイムアウトの時間を長くしとけば、同じぐらいで終わりそうだ。タイムアウト時間がデフォルトでは300秒なので、100回ぐらい繰り返さないと終わらない。

ちょっと記憶に残ってるのが、ずいぶん前にこの300MBぐらいのデータをローカルでインポートして、わりとあっという間に終わらなかったっけということ。なんとなくインデックスがない状態にしとけば、速いのかもしれないとも思うけれど、検証はめんどくさいので保留。インポートがあっと言う間に終わってもインデックス作成で2時間かかるのかもしれないし・・・。
kuwa
/usr/local/mysql/bin/mysql --user=root --password=パスワード  addr <  addr_20070731.sql

ターミナルからこんなんでもいいみたい。
mysqldumpでバックアップしたファイルの読み込みから。

時間はたいして変わらないかも。mysqldump -optで書き出したファイルなら、quickがついてるから少し速いかも。
コメント: ( )
name:
ログインしておくと、後で編集が可能になります。