フィールドの行数が数十万行あるデータのインポートで上手くいかなかったのでメモ。
今後何度も同じ問題にぶつかりそうなので、ついでにバックアップの方法もメモメモ。
環境はWindows+xammp, MySQL5.0.51
■phpMyAdminでは限界が・・・
最初phpMyAdminでSQLファイルのインポートを試みたがみごとに失敗。
主な原因はファイルサイズがでかすぎる。
PHPメモリと実行時間の上限が原因ではないかと思うが、原因が思い当たりすぎてよくわからんので割愛。
とりあえずcmdで復元を試みる方法に変更しました。
■復元
C:\xampp\mysql\bin> mysql --default-character-set=utf8 -u root -p dbname < /home/backup.sql
でSQLファイルのインポートを行います。
C:\xampp\mysql\binはMySQLのインストールパスなので適宜書き換えて。
/homeはバックアップファイルのパスなので適宜書き換えて。
dbnameは適当なデータベース名に書き換えて。
今回はUTF8だったので、念のため--default-character-set=utf8を指定。
ただ、ファイルサイズが十数MBもあったため次のようなエラーメッセージが↓
ERROR 2006 (HY000) at line **: MySQL server has gone away
(**行目でMySQLサーバーがどっか行った)
原因はインポートしようとしたファイルサイズがでかすぎたみたいです。
C:\xampp\mysql\bin> mysql --default-character-set=utf8 --max-allowed_packet=32M -u root -p dbname < /home/backup.sql
と書き換えてリトライ。
またまたERROR 2006 (HY000) at line **: MySQL server has gone away
仕方ないので、MySQL設定ファイルを書き換えます。
C:\xampp\mysql\bin\my.cnf
の
max_allowed_packet = 1M
を
max_allowed_packet = 32M
に変更して、MySQLを再起動。
今度はうまく行きました。
(スッキリ)
■バックアップ
C:\xampp\mysql\bin> mysqldump --default-character-set=utf8 -u root -p dbname > /home/dumpdata.sql
これで指定したパスに指定したファイル名でバックアップが取れます。
dbnameの後にテーブル名を指定できる。
他にもオプションがあるので、
http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.htmlあたりを参考に。
特に大きなデータベースをバックアップする際にはMySQLサーバーのメモリに負荷が大きくなるそうなので、適したオプションを指定した方がよさそうです。
この記事へのコメント一覧