最初に考えたのは、max_allowed_packetが実際に制御するものです。これが私が見つけたものです:
「MySQLの内部を理解する」(ISBN 0-596-00957-7)の99ページによると、これはそれを説明する1〜3の段落です。
MySQLネットワーク通信コードは、クエリが常に適度に短く、したがって、MySQLの用語ではパケットと呼ばれる1つのチャンクでサーバーに送信および処理できるという前提で記述されています。サーバーは、パケットを格納するための一時バッファにメモリを割り当て、完全に収まるように要求します。このアーキテクチャでは、サーバーがメモリ不足になるのを防ぐための予防策が必要です。このオプションを使用すると、パケットのサイズに上限が生じます。
このオプションに関連するコードは
sql / net_serv.ccにあります。my_net_read()を確認してから、my_real_read()の呼び出しに従い、net_realloc()に特に注意して
ください。
この変数は、多くの文字列関数の結果の長さも制限します。詳細については、sql / field.ccおよび
sql / intem_strfunc.ccを参照してください。
そのmax_allowed_packetの定義を考慮して、次にServerFaultから何かを発見しました:innodb_log_file_sizeとinnodb_log_buffer_sizeの組み合わせは、大きなものがある場合、最大のblobオブジェクトの10倍より大きくなければなりません。
これら2つのことを念頭に置いて、/ etc / my.cnfのinnodb_log_file_sizeを、許可されている最大サイズの2047Mに増やします。もちろんこれには以下が必要です
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start
これにより、データに含まれる可能性のある大きなblobに対応できます。