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 …
を実行するだけで同じエラーが発生しました。
おそらく、クライアント(インポートを実行するために実行している)と、実行してインポートを受け入れるデーモン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;
(パケットサイズには非常に大きな値を使用してください。)
Michaelpryorが言ったように、あなたはbothclientとデーモンmysqldサーバーのためにそれを変える必要があります。
クライアントのコマンドラインに対する彼の解決策は優れていますが、設定によってはiniファイルが常にうまくいくとは限りません。
端末を開き、mysqlと入力してmysqlプロンプトを表示し、次のコマンドを発行します。
set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000;
Mysqlプロンプトを開いたままにして、2番目の端末でコマンドラインのSQL実行を実行します。
これはmy.ini
ファイル(Windowsでは、\ Program Files\MySQL\MySQL Serverにあります)のserverセクションの下で変更できます。例えば:
[mysqld]
max_allowed_packet = 10M
デフォルトでは、my.cnfはどこにもありません。
/usr/local/mysql/support-files/my*.cnf
の1つを/etc/my.cnf
にコピーしてmysqld
を再起動する必要があります。 (これをインストールしたのであれば、MySQL設定ペインでできることです。)
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
この修正はMySQLデーモンのmax_allowed_packetを増やすことです。 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
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
#
あなたの問題とはちょっと無関係なので、これはGoogleのものです。
あなたがSQLをmysqldumpしなかったなら、それはあなたのSQLが壊れているのかもしれません。
私のコードに偶然に閉じられていない文字列リテラルがあることで、このエラーが発生しました。ずさんな指が起こる。
MySQLのおかげで、それは暴走文字列を取得するための素晴らしいエラーメッセージです。
以下のようなコマンドを発行するmax_allowed_packet
変数を使用してください。
mysql --max_allowed_packet=32M -u root -p database < dump.sql
時々タイプ設定:
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
攻撃者がより大きなサイズのパケットをプッシュしてシステムをクラッシュさせる可能性があるため、max_allowed_packet
の値を高くすることはセキュリティ上のリスクです。
そのため、max_allowed_packet
の最適値を調整してテストします。
(set global max_allowed_packet = xxx
を使用)の場合はmy.iniの一部として使用するよりも変更する方が良いでしょう。またはmy.conf.
エラー:
エラー1153(08S01)、6772行目: 'max_allowed_packet'バイトより大きいパケットを取得しました操作は終了コード1で失敗しました
QUERY:
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
Max_allowed_packetをmysqldumpでダンプしたときと同じ(またはそれ以上)に設定します。それができない場合は、小さい値でもう一度ダンプを作成してください。
つまり、mysqldumpでダンプしたとします。他のツールを使用したことがあるのであれば、それはあなた自身のものです。
私は共有ホスティング環境で働いています、そして私はDrupalに基づくウェブサイトをホスティングしました。 my.ini
ファイルやmy.conf
ファイルも編集できません。
そのため、Cache
に関連するすべてのテーブルを削除したため、この問題を解決できました。それでも私はこの問題に対処するための完璧な解決策/方法を探しています。
編集 - テーブルを削除して問題が発生した、coz Drupalはこれらのテーブルが存在するはずだと思っていました。それで私は問題を解決したこれらのテーブルの内容を空にしました。