mysqlに巨大なデータを流し込む時によくあるトラブルとその解決方法
はじめに
Webアプリの開発で、運用データを開発環境にインポートすることってよくあることだと思います。 この記事は、そのときに遭遇したトラブルと、その解決方法です。 環境は OS X El Capitan(10.11.4) ですが、Linuxとかでも解決方法は同じだと思われます。
ちなみに、インポートするデータのサイズ(ファイルのサイズ)は、550M程度でした。
トラブル1
トラブル内容
$ mysql -u root -p testdb < testdb.sql Enter password:**** ERROR 2006 (HY000) at line 190: MySQL server has gone away
解決方法
max_allowed_packet
のサイズを大きくします。
my.cnf
に、以下を記述して再起動しましょう。
[mysqld] max_allowed_packet=100M
トラブル2
トラブル内容
$ mysql -u root -p testdb < testdb.sql Enter password:**** ERROR 1118 (42000) at line 207: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.
解決方法
innodb_buffer_pool_size
とinnodb_log_file_size
のサイズを大きくします。
my.cnf
に、以下を記述して再起動しましょう。
[mysqld] innodb_buffer_pool_size = 1024M innodb_log_file_size=512M
最後に
自分は、上記設定を~/.my.cnf
に記述しました。my.cnf
は、読み込み順序があるらしいので、お気をつけください。
$ mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf