OpenPNE で画像がアップロードできなくなったときのチェックポイント
OpenPNE の画像がアップできない原因はいくつかあります。GD がないとかは他にも参考になるサイトがあるのでそれ以外の場合を書きました。
最初からアップロードできない場合
MySQL の最大パケット転送料に引っかかっている場合があります。以前書いた以下のエントリが参考になるかと思います。
MySQL に大きなデータを送る際に max_allowed_packet を確認した方がいい
急に画像がアップロードできなくなった場合
今回この調査依頼が来て、調査したところ MySQL の最大テーブル長 (Max_data_length)に引っかかっていました。
mysql > show table status like 'c_image'\G *************************** 1. row *************************** Name: c_image Engine: MyISAM Version: 9 Row_format: Dynamic Rows: 23279 Avg_row_length: 184499 Data_length: 4294961036 Max_data_length: 4294967295 Index_length: 740352 Data_free: 0 Auto_increment: 26026 Create_time: 2008-03-10 17:57:28 Update_time: 2009-07-06 20:36:14 Check_time: 2009-07-06 15:39:07 Collation: utf8_unicode_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
赤字の部分です。Max_data_length はデフォルトの 4294967295。現在のデータサイズは 4294961036。ほとんど差がありません。
この状態で OpenPNE が画像ファイルを MySQL に挿入する部分で以下のエラーが出ていました。
[nativecode=1114 ** The table 'c_image' is full]
解決方法は Max_data_length を大きくするしかありません。
Max_data_length は以下のようにして変更できます。
mysql > ALTER TABLE テーブル名 MAX_ROWS=最大レコード数, AVG_ROW_LENGTH=平均レコード長
MAX_ROWS x AVG_ROW_LENGTH のサイズが Max_data_length になります。
OpenPNE 2.10 でこの不具合が出ないように、修正されたようです。チケットがありました。
#305 (c_imageのMAX_ROWS設定) – OpenPNE – Trac
c_imageのMAX_ROWS設定画像アップできない不具合の解決
ALTER TABLE c_image ENGINE=MyISAM DEFAULT CHARSET=utf8 MAX_ROWS=190000;
で。
OpenPNE の 2.8 から 2.10 へのアップグレードの SQL を確認してみました。
以下のようになっていました。
ALTER TABLE c_image ENGINE=MyISAM DEFAULT CHARSET=utf8 MAX_ROWS=190000;
BLOB とか可変長のものがあるときは AVG_ROW_LENGTH を指定しないといけないと思っていたのだが、いいのか。
今回発生したバージョンは 2.8.8 でした。バージョンアップって大切ですね。
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
1swagger…
…