MySQLで容量の大きいファイルを格納する。

添付ファイルをMySQLで格納するために、LONGBLOB型を使用。LONGBLOB型は約4G(3^32バイト)なんだけど、ファイルをアップロードしようとするとMySQLが落ちてしまう。
(参考:MySQL 5.1 リファレンスマニュアル :: 10.5 データタイプが必要とする記憶容量)
テーブル(カラム)的には4GまでOKなんだけど、C/S間で送信するためには他にも設定必要。

BLOB 型または TEXT 型オブジェクトの最大サイズは、その型によって決まるが、クライアントとサーバ間で実際に送信できる最大値は使用可能なメモリ量と通信バッファのサイズで決まる。メッセージバッファのサイズ(max_allowed_packet)は変更できるが、サーバ側とクライアント側の両方で変更を行う必要がある。

(MySQL 4.1 リファレンスマニュアル :: 6.2.3.2 BLOB 型と TEXT 型より)
ということでmy.iniに以下を追記してMySQL再起動。
max_allowed_packet=25000000


確認。

mysql> show variables;
・・(中略)・・
| max_allowed_packet              | 24999936                                            |  ←増えてます
| max_binlog_cache_size           | 4294967295                                          |
| max_binlog_size                 | 1073741824                                          |
| max_connect_errors              | 10                                                  |
| max_connections                 | 100                                                 |
・・・

→10M未満までは大丈夫でした。
 ただ、10M以上だと落ちちゃう。max_allowed_packet以外も必要そう。


ちなみに、「max_allowed_packet のプロトコル制限は 1GB」だそうな。(MySQL 5.1 リファレンスマニュアル :: 4.2.3 システム変数)