max_allowed_packetの設定変更
|
テストと動作確認のために大量のデータをズドーンとinsertしたところ、下記のエラーが発生して少し悩んだので、解決方法を整理します。
packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server
max_allowed_packet設定値の確認
mysqlのDBに接続し、下記コマンドを実行。
show variables like 'max_allowed_packet';
出力結果はbyte単位で表示されます。
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.01 sec)
max_allowed_packetの設定変更
コマンドで設定変更
下記コマンドでmax_allowed_packetの設定変更できます。
# max_allowed_packetを100MByteに変更
set global max_allowed_packet = 100 * 1024 * 1024;
これですんなりいけばよいですが、私の環境はRDSだったのですが、下記のようなエラーが発生しました。
Access denied; you need (at least one of) the SUPER privilege(s) for this operation
my.cnfファイルで設定変更
プロファイルを設定し、mysqlの再起動で設定を反映できるようです。
プロファイルの場所は mysql --help
で確認できます。
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
/etc/mysql/my.cnf
を確認すると下記のような文字列がありました。
!includedir /etc/mysql/conf.d/
/etc/mysql/conf.d/ディレクトリをインクルードしているようなので、そちらのファイルを開き、下記を追記しました。
[mysql]
max_allowed_packet=100MB
AWSのRDSにて設定変更する場合
AWSのRDSの場合はマネジメントコンソールから設定変更できるようです。
現プロダクトはTerraformで構成管理していたので、Terraformの定義を変更し対応しました。
# max_allowed_packetを100MByteに設定
resource aws_db_parameter_group db_parameter_group_mysql5_7 {
# 中略
parameter {
apply_method = "immediate"
name = "max_allowed_packet"
value = "104857600"
}
}
まとめ
これで大量のレコードを挿入し放題です。やったぜ!