hina2go

主に技術系のこことか。最近React始めました。

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_sizeinnodb_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