MySQLで大容量のデータを挿入する前に
MySQLに大容量の画像を挿入する前に確認したいこと
ちょっとした画像アップローダをPHP+MySQLで実装したのですが、下記のようなエラー を吐きました。
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help.
このエラー、600~700MB以下の画像では出ませんでした。ということは 画像の容量が問題であることがわかります。ちなみにDBの型はmediumblob です。少し余裕があるくらい。型が原因でないことは明白です。
検索してみると、php.iniのメモリサイズの上限やpostできる容量を増やす設定
を修正すれば良い、との情報が。そこで少々いじってみたのですが、
どうも上手くいかない・・・。
そこでもう少し調べてみると、Qiitaでこのような記事を見つけました。
http://qiita.com/wonda/items/e8054c98a7447b2ff8a2
テーブルのROW_FORMATがCOMPACTになっているから DYNAMICにしてあげなきゃいけないようですね。(実はここらへんが よくわかっていないので、あとで調べなきゃいけない、と思っているところです)
my.iniを修正
windows8にxamppで環境を構築しています。
php.iniではなくMySQLの設定ファイル、xampp/mysql/bin/my.iniを修正します。
まず、[mysqld]の下に
を追加します。
次に、
- max_allowed_packet = 1M
を任意の数値に変更します。僕は余裕をもって16Mとし、 プログラム側で4MB以上を弾く仕様にしましたが、実際は 8MBくらいで良いと思います。
最後に、
の数値部分を変更します。僕は1番目を500Mに、 2番目を800Mにしましたが、そこは臨機応変に。
どうやら原因は転送時の容量オーバだったようです。
まだエラーが出る?
可能性としては次の3つが考えられます。
もっと詳しい情報がほしい方はこちらへ
https://yakst.com/ja/posts/2750