MySQLエラー1153-'max_allowed_pa​​cket'バイトより大きいパケットを取得しました


430

MySQLダンプをインポートすると、次のエラーが発生します。

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

どうやらデータベースには添付ファイルがあり、挿入が非常に大きくなります。


これは、MySQLパッケージからインストールされたMySQL 5を搭載したMacのローカルマシンにあります。

max_allowed_packetダンプをインポートできるようにするにはどこを変更すればよいですか?

他に設定すべきことはありますか?

実行mysql --max_allowed_packet=32M …しただけで同じエラーが発生しました。



@Muleskinner、この質問はあなたが言及する質問の3年前に投稿されました。私はあなたのコメントの4年後にこれを指摘しています。:p
tiomno 2018

2
Webyog.comリンクが壊れています:404
Pathros

ここでは、同様のエラー「クエリのパケットが大きすぎます(5526600> 1048576)」は、JetBrainsによってDataGrip 2016.1を使用してMySQLデータベースに接続するときに誤ったパスワードエントリが原因で発生し、修正されたときに解決されました(正しいパスワードを使用) MySQLデータベースユーザーに対応)。
nyedidikeke

回答:


589

おそらく、クライアント(インポートを実行するために実行中)と、実行中でインポートを受け入れるデーモンmysqldの両方に対して変更する必要があります。

クライアントの場合は、コマンドラインで指定できます。

mysql --max_allowed_packet=100M -u root -p database < dump.sql

また、mysqldセクションの下のmy.cnfまたはmy.iniファイルを変更して、次のように設定します。

max_allowed_packet=100M

または、同じサーバーに接続されたMySQLコンソールでこれらのコマンドを実行することもできます。

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(パケットサイズには非常に大きな値を使用してください。)


16 GBのRAMを搭載したサーバーがありますが、max_allowed_packet100 MB に設定することは悪い考えですか?
Webnet 2010年

11
参考までに-それは私が別のエラーを解決するのに役立ちました-「#2006サーバーがなくなりました」
itho

37
「set global」の使用は、次のmysqlサービスが再起動するまで機能することに注意してください。
シェーバー

2
「グローバル設定」と最後の「;」をスキップします。これらの値をmy.iniまたはmy.cnfファイルに追加するとき。例:my.confの「net_buffer_length = 1000000」。
Rustavore 2014年

3
CentOS 5では、my.cnfは/etc/my.cnfにあります
Rustavore

124

michaelpryorが言ったように、クライアントデーモンmysqldサーバーの両方に対して変更する必要があります。

クライアントのコマンドラインに対する彼のソリューションは優れていますが、構成によっては、iniファイルが必ずしもうまくいくとは限りません。

したがって、ターミナルを開き、mysqlと入力してmysqlプロンプトを取得し、次のコマンドを発行します。

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

mysqlプロンプトを開いたままにして、2番目のターミナルでコマンドラインSQLを実行します。


2
私のために問題を解決しました。私が行っているインポートは1回限りであり、構成を簡単に変更することはできません。これはうまくいきました。:D
ロブハワード

39

これはmy.ini、サーバーセクションの下のファイル(Windowsでは\ Program Files \ MySQL \ MySQL Serverにあります)で変更できます。次に例を示します。

[mysqld]

max_allowed_packet = 10M

5
Macでは、ファイルは明らかに別の場所にあります。
2008

2
確かですが、正確な場所はわかりませんが、設定はまだどこかにあります
GHad

MariaDBを使用するFedora 20の私にとっては、/ etc / my.cnf.d / server.cnfの最後にその設定を配置することでうまくいきました。もちろん、サービスを再起動する必要がありました... sudo nano systemctl restart mariadb.service
Ray Foss

ファイルは「my.cnf」であり、通常は/ etc /または/ usr / local / etcにあるnixシステム上にあります。編集したら、mysqlサーバーを再起動して変更を適用してください。
Chris

17

mysql.com dmgパッケージディストリビューションからMySQLを使用する場合、Mac OS Xでmy.cnfを再実行します。

デフォルトでは、my.cnfはどこにも見つかりません。

のいずれかをコピー/usr/local/mysql/support-files/my*.cnf/etc/my.cnfて再起動する必要がありますmysqld。(インストールしている場合は、MySQL設定ペインで実行できます。)


OSXに設定されているデフォルトの構成はmy-medium.cnfのようですが、max-allowed_pa​​cketのサイズはmy-large.cnfで同じです...変更を開始するまで:)
Chris Burgess

私の場合、/ usrl / local / mysql / my.cnfを/etc/my.cnfにコピーするまで機能しません。
VG

14

etc / my.cnfで、max_allowed _packetとnet_buffer_lengthを次のように変更してみてください。

max_allowed_packet=100000000
net_buffer_length=1000000 

これが機能しない場合は、変更してみてください

max_allowed_packet=100M
net_buffer_length=100K 

12

修正は、MySQLデーモンのmax_allowed_pa​​cketを増やすことです。Superとしてログインし、次のコマンドを実行することで、実行中のデーモンに対してこれを行うことができます。

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

次に、ダンプをインポートします。

gunzip < dump.sql.gz | mysql -u admin -p database

MySQLのどのバージョンを実行していましたか?
crmpicco

6

CENTOS 6 /etc/my.cnfの[mysqld]セクションでの正しい構文は次のとおりです。

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#

4

max_allowed_packet次のようなコマンドを発行する変数を使用します

mysql --max_allowed_packet=32M -u root -p database < dump.sql


2
試してみましたが、うまくいきませんでした。全体のダンプは272mbで、それより高い最大で試してみました。
2008

4

あなたの問題とは少し関係ないので、ここにGoogle向けのものを示します。

SQLをmysqldumpしていない場合は、SQLが壊れている可能性があります。

コードに閉じられていない文字列リテラルが誤って含まれているため、このエラーが発生しました。ずさんな指が起こります。

これは、MySQLに感謝して、暴走文字列を取得するための素晴らしいエラーメッセージです。


1
SQLが壊れているため、このエラーも発生しました。より具体的には、私のテーブルにはnull制約があり、私のコードはnull値を挿入していました。MySQLは有益なエラーを返す代わりに、max_allowed_packetエラーを返しました。将来的に役立つ場合は、pandas APIを使用して挿入していましたdf.to_sql(...)
Alex Petralia

1

時にはタイプ設定:

max_allowed_packet = 16M

my.iniで機能していません。

my.iniを次のように決定してください。

set-variable = max_allowed_packet = 32M

または

set-variable = max_allowed_packet = 1000000000

次に、サーバーを再起動します。

/etc/init.d/mysql restart

1

max_allowed_packet攻撃者が大きなサイズのパケットをプッシュしてシステムをクラッシュさせる可能性があるため、高い値を設定することはセキュリティリスクです。

したがって、最適化された値max_allowed_packetが調整およびテストされます。

my.inimy.confの 一部として持つよりも、必要に応じて(を使用してset global max_allowed_packet = xxx変更する方が適切です。


0

私は共有ホスティング環境で作業しており、Drupalに基づくWebサイトをホストしています。my.iniファイルまたはmy.confファイルも編集できません。

そのため、関連するすべてのテーブルを削除したCacheため、この問題を解決できました。それでも私はこの問題を処理するための完璧なソリューション/方法を探しています。

編集 -テーブルを削除すると問題が発生しました。cozDrupalは、これらのテーブルが存在することを期待していました。そこで、これらのテーブルの内容を空にして問題を解決しました。


0

エラー:

エラー1153(08S01)at 6772: 'max_allowed_pa​​cket'バイトより大きいパケットを取得しました操作は、終了コード1で失敗しました

クエリ:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

最大値:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

max_allowed_pa​​cketを、mysqldumpでダンプしたときと同じ(またはそれ以上)に設定します。それができない場合は、小さい値でダンプを再度作成してください。

つまり、mysqldumpでダンプしたと仮定します。他のツールを使用した場合は、ご自分で作業してください。

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