MySQL の最大許容パケット数を超過
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Server* 製品のサポートは 2024 年 2 月 15 日をもって終了します。Server 製品を利用している場合は、Atlassian Server のサポート終了のお知らせページにて移行オプションをご確認ください。
*Fisheye および Crucible は除く
問題
次のうちの 1 つ以上が観察される。
- プラグインをインストールまたはアップグレードできない
- Universal Plugin Manager をアップグレードできない
- サイズの大きなページを保存できない
- 添付ファイルをアップロードできない (添付ファイルをデータベースに保存している場合)
atlassian-confluence.log:
に次のエラーが表示される場合もあります。
ERROR [pool-6-thread-3] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Packet for query is too large (1889999 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
Cause:
java.lang.RuntimeException: There was a problem evicting or flushing a PluginData object
at com.atlassian.confluence.plugin.persistence.hibernate.HibernatePluginDataDao.saveOrUpdate(HibernatePluginDataDao.java:65)
caused by: net.sf.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at net.sf.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:90)
caused by: java.sql.BatchUpdateException: Packet for query is too large (1238730 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1213)
原因
デフォルトの MySQL パケット サイズ設定は、Confluence データベースに大部分のアドオンをインストールするのに十分なサイズではありません。プラグイン データ、添付ファイル、およびサイズの大きなページ ボディは、多くの場合、デフォルトの制限である 1 MBを超えることがあります。詳細は、以下のページを参照してください。
http://dev.mysql.com/doc/refman/5.6/en/packet-too-large.html
ソリューション
MySQL のパケット サイズをより大きな値 (256 MB) に設定して、MySQL Server を再起動します。256 MB は、大部分の場合に対応するのに十分な大きさのはずです。
shell> mysqld --max_allowed_packet=256M
または、MySQLの my.cnf
ファイル (Windows OS では my.ini
という名前が多い) を編集することで、MySQL サーバの設定で同じことを行うこともできます。ファイル内で [mysqld]
セクションを見つけ、以下のパラメータを追加あるいは修正します。
[mysqld]
...
max_allowed_packet = 256M
...
(i) 上記の変更を有効にするには、MySQLサービスを必ずに再起動してください。詳細は、MySQL のマニュアル (http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html) を参照してください。
注意:
データベースを停止できない場合は、代わりに最大許容パケットパラメータの値を動的に設定できます。この操作を行うには、次の手順を実行します。
- root ユーザーとしてログインします
- 値は '256M' ではなく、整数で設定する必要があります。256Mは、256*1024*1024、つまり 268435456 に相当します。
mysql> SET GLOBAL max_allowed_packet=268435456;
これが適用されていることを確認するには:
Relogin to your mysql client.
mysql> SELECT @@max_allowed_packet;
- Confluence インスタンスを再起動します
変更を永続的に維持するには、上記の説明の通り、 /etc/my.cnf ファイルを更新する必要があります。