max_allowed_pa​​cketサイズを変更する方法


317

MySQLデータベースのBLOBフィールドに問題があります-約1MBを超えるファイルをアップロードするとエラーが発生します Packets larger than max_allowed_packet are not allowed.

これが私が試したものです:

MySQL Query Browserで実行した結果、show variables like 'max_allowed_packet'1048576が返されました。

次に、クエリを実行し、set global max_allowed_packet=33554432続けてshow variables like 'max_allowed_packet'-予想どおり33554432を返します。

しかし、MySQLサーバーを再起動すると、魔法のように1048576に戻ります。ここで何が問題になっていますか?

おまけの質問、BLOBフィールドを圧縮することは可能ですか?


1
BLOBフィールドはバイナリラージオブジェクトです。ほんの一部です。したがって、コンテンツを圧縮できます。代わりに、BLOBフィールドに格納する他の(できれば少ない)ビットが提供されます。入力したデータが変更されるだけです。また、必要になったときにBLOBコンテンツを解凍する必要があります。
Konerak


回答:


407

ファイルのセクションまたはセクションの下に1行を含めることにより、my.iniまたは~/.my.cnfファイルを変更します。[mysqld][client]

max_allowed_packet=500M

次にMySQLサービスを再起動すれば完了です。

詳細については、ドキュメントを参照してください。


1
iniファイルを手動で変更しなくてもこれが可能になることを望んでいたにもかかわらず、感謝の意を表しているようです。
Muleskinner

63
参考までに、これは「MySQLがなくなった」エラーの解決策でもあります
djb

1
@Konerak、誰が挑発者でしたか?
Pacerier、2015

14
誰かに答えを与えてから、Googleに答えを確認してもらうように言っても意味がないようです。特に、SOはプログラミングに関連する適切な質問の上位の結果のいくつかを常に占めています。無限ループのプログラミングについて話します!!! Google> SO> Google> SO> Google> SOなど。
Phill Healey 2016

5
それが下に[mysqld]あり、[mysql](非常に類似していない)ことを確認してください。何分か頭を悩ませました。
Halvor Holsten Strand

225

max_allowed_pa​​cketの変数は、クエリを実行することによって、グローバルに設定することができます。

ただし、my.ini(dragon112が示唆するように)ファイルで変更しない場合、グローバルに設定した場合でも、サーバーが再起動すると値がリセットされます。

サーバーが再起動するまで、すべての人に許可される最大パケットを1GBに変更するには:

SET GLOBAL max_allowed_packet=1073741824;


15
@artnikpro機能しますが、「クエリは正常に実行され、0行が影響を受けた(0.00秒)」と誤解を招くように感じるかもしれませんが、それは正しいことです。
AnnTea 2014

10
うまくいきません。SHOW VARIABLES WHERE variable_name = 'max_allowed_packet'それでも古い値が表示されます
Poma

50
既存の接続ではmax_allowed_pa​​cketは変更されないため、古い値が表示されます。切断して再接続すると、更新された値が表示されます。
Matt Crinklaw-Vogt 2015

2
Matt Crinklaw-Vogtは正しいです。終了して再度接続する必要があります
マクリリア2016年

89

私の後輩開発者の1人がこれを変更する際に問題を抱えていたので、Linuxユーザー向けにこれをさらに詳しく説明しようと思いました。

1)ターミナルを開く

2)ssh root @ YOURIP

3)rootパスワードを入力します

4)nano /etc/mysql/my.cnf(コマンドが認識されない場合は、最初にこれを行うか、viを試してから繰り返してください:yum install nano)

5)[MYSQLD]セクションの下に次の行を追加します:max_allowed_pa​​cket = 256M(明らかに必要に応じてサイズを調整します)。彼はそれを最初にファイルの最後に置くのを間違えたので、それはうまくいきませんでした。

ここに画像の説明を入力してください

6)Control + O(保存)、次にENTER(確認)、次にControl + X(ファイルを終了)

7)サービスmysqld restart

8)phpmyadminの変数セクションで変更を確認できます


これは実際にはCentosOS6で行われましたが、もちろんルートsshアクセスを使用しないことに同意します
naw103

(Debianの8およびCentOSの6のように)私が使用したことを、いくつかのGNU / Linuxディストリビューション農産物を@tamasd sudo: command not foundthis incident will be reportedのどちらかためsudoにインストールおよび設定されていません。sudo初めて設定する手順をこの回答に散らかした方がいいでしょうか?
Damian Yerrick 2016

root sshではなく問題ですが、パスワードログインが問題です。sudo権限を持つユーザーアカウントは、rootと同じくらい安全ではありません。SSH鍵ベースの認証を使用するだけです。
Martin Schneider

マシンにログインする方法の問題はOTであり、彼は彼のレシピで、何らかの方法でログインする必要があることを正しく報告しました。
devsmt 2018

41

PCでmy.iniファイルを見つける方法を知りたい人もいるでしょう。Windowsユーザーの場合、最善の方法は次のとおりです。

  1. Win + R(「run」のショートカット)、タイプservices.msc、Enter
  2. 「MySQL56」のようなエントリを見つけ、それを右クリックしてプロパティを選択します
  3. "D:/ Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "D:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56のように表示されます。

私はhttp://bugs.mysql.com/bug.php?id=68516からこの回答を得ました


2
これはWindowsでは重要です。MySQLをサービスとして使用し、Workbenchでmy.iniを編集したところ、この回答により、サービスとしてのMySQLがWorkbenchで編集したものとは別のmy.iniを使用していることがわかりました。
Robert Niestroj

20

すべての指示に従って、これは私がやったことと働きました:

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

ご覧のとおり、max_allowed_pa​​cketはmy.ini以外で変更されています。

セッションを終了して、もう一度確認してみましょう。

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query


Now I will start the server
2016-02-03 10:31:54 - Server is running


C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

結論、SET GLOBAL max_allowed_pa​​cket = 1073741824の後、誰かが以前に述べたように、サーバーは再起動されるまで新しいmax_allowed_pa​​cketを保持します。


13

バックアップの実行中にこのエラーが発生した場合max_allowed_packetは、my.cnf特にで設定できますmysqldump

[mysqldump]
max_allowed_packet=512M

aの実行中にこのエラーが発生し続けmysqldumpましたmy.cnfが、[mysqld]セクションの下でこれを設定しているため、理解できませんでした。設定できることを確認[mysqldump]して値を設定すると、バックアップは問題なく完了しました。


10

wamp mysqlサーバーを実行している場合

ワンプトレイアイコン-> MySql-> my.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

uが見つかるまで最後までスクロールします

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

間にpacket_sizeの行を追加します

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

このクエリで機能したかどうかを確認する

Select @@global.max_allowed_packet;

5

このエラーは、データに設定値よりも大きい値が含まれているために発生します。

ただ、書き留めるmax_allowed_packed=500M か、500 * 1024Kと利用代わりに500Mのしたい場合は、そのことを計算することができます。

MySQLを再起動します。


2
/etc/my.cnfMySQLインスタンスのために、または/etc/my.cnf.d/server.cnfMariaDBのために
エフゲニー・レベデフ

5

多くの回答者が問題を発見し、すでに解決策を提供しています。

Mysql WorkbenchツールからGlogal変数の値を変更するという別のソリューションを提案したいだけです。サーバー上でローカルに(またはSSH接続経由で)実行されているWorkbenchを使用する場合は、当然です

インスタンスに接続してメニューに移動するだけです。

サーバー->オプションファイル->ネットワーク-> max_allowed_pa​​cked

目的の値を設定してから、MySql Service再起動する必要があります


4

Amazon RDSサービスでMySQLを実行している場合、この変更はパラメーターグループを介して行われます。新しいPGを作成するか、既存のPGを使用する必要があります(デフォルト以外の読み取り専用)。

max_allowed_packetパラメータを検索し、その値を変更してから、保存をクリックしてください。

MySQLインスタンスに戻り、新しいPGを作成した場合は、PGをインスタンスに接続する必要があります(再起動が必要になる場合があります)。インスタンスにすでに接続されているPGを変更した場合、そのPGが接続されているすべてのインスタンスに、再起動せずに変更が適用されます。


0

大きなサイズの画像やデータをデータベースにアップロードする場合。データ型をに変更するだけ'BIG BLOB'です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.