パケットの最大容量を確認(max_allowed_packet)
最終更新日:

大容量データをInsertするときなど、パケットの最大容量を超えてないか注意を払う必要があります。ここでは、パケットの最大容量の確認方法を紹介します。

確認

パケットの最大容量は max_allowed_packet で確認できます。

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.01 sec)

上記例では、4MBが最大容量であることがわかります。

変更

SET文で設定値を変更してみます。
(SET文のため、MySQLを再起動すると設定が元に戻ります。)

今回は動作確認のため、極端に低い値を設定します。

mysql> SET GLOBAL max_allowed_packet=1024;

一度ログアウトします。

mysql> exit;

再ログインして設定を確認します。

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_allowed_packet | 1024  |
+--------------------+-------+
1 row in set (0.01 sec)

変更されていることがわかります。

エラーになることを確認

動作確認用のテーブルを作成します。

CREATE TABLE `sample_max_test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `a` text COLLATE utf8mb4_bin,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

aカラムに1KBを超える情報をINSERTしようとすると、下記のようにErrorが発生しました。

mysql> INSERT INTO `sample_max_test` (`id`, `a`) VALUES (NULL, 'aaaa...  (省略) ...aaaa');
ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes

参考