MySQL クエリのパケットが大きすぎる問題と解決策

MySQL クエリのパケットが大きすぎる問題と解決策

問題の説明:

エラーメッセージ:

原因: com.mysql.jdbc.PacketTooBigException: クエリのパケットが大きすぎます (1354 > 1024)。この値はサーバー上で変更できます。
max_allowed_pa​​cket変数を設定することによって

MySQL は、構成ファイルに従って、サーバーが受け入れるデータ パケットのサイズを制限します。場合によっては、挿入、更新、またはクエリ中のデータ パケットのサイズが max_allowed_pa​​cket パラメータによって制限され、操作が失敗することがあります。

max_allowed_pa​​cket パラメータを表示します。

クライアントで実行:

'%max_allowed_pa​​cket%' のような変数を表示します。

結果は次のとおりです。

+--------------------+-------------+ 
| 変数名 | 値 | 
+--------------------+-------------------+ 
| 最大許容パケット | 1024 | 
+--------------------+-------------------+

変更方法:

1. 設定ファイルを変更するには、my.cnf (Windows の場合は my.ini) を編集し、[mysqld] セクションまたは mysql サーバー設定セクションで変更します。

max_allowed_packet = 20M

my.cnfが見つからない場合は、

mysql --help | grep my.cnf

my.cnf ファイルを見つけてください。

Linux では、ファイルは /etc/ にあります。

2. mysqlコマンドラインで変更する

グローバルmax_allowed_pa​​cketを2*1024*1024*10に設定します  
//ここでの値はバイト数です。20Mに変更した場合、変更を有効にするには再度クライアントにログインする必要があります。

注意: クライアントがコマンドを使用して変更を行った後、変更は一時的にのみ有効になります。MYSQL を再起動すると、元の値が復元されます。

Linux 上の MySQL で報告される「クエリのパケットが大きすぎます (1040 > 1024)」というエラーの解決方法

プロジェクトは以前は正常に実行されていましたが、ここ数日突然クエリ エラーが頻繁に表示されるようになりました。ログを確認すると、「クエリのパケットが大きすぎます (1040 > 1024)」というエラーが表示されていました。サーバー上で「max_allowed_pa​​cket」変数を設定することで、この値を変更できます。 Baiduで解決策を検索し、解決プロセスを記録しました。

1. 理由

クエリ データベースによって返されたデータ パケットが大きすぎて、既定値を超えています。
mysql にログインし、コンソールに次のコマンドを入力して、デフォルトの max_allowed_pa​​cket 値を照会します。値は 1024 のみです。

'%max_allowed_pa​​cket%' のような変数を表示します。

2. デフォルトの最大許容パケットサイズを変更する

2.1 方法1: コマンド方式

(1)MySQLコンソールで次のコマンドを入力してmax_allowed_pa​​cketを20Mに設定する

グローバルmax_allowed_pa​​cketを20*1024*1024に設定します。

(2)MySQLを終了し、MySQLサービスを再起動してからMySQLにログインし、max_allowed_pa​​cketが正常に変更されたかどうかを確認します。

'%max_allowed_pa​​cket%' のような変数を表示します。

2.2 方法2: 設定ファイルmy.cnfを変更する
(1)mysqlコンソールで次のコマンドを入力してmy.cnfを編集します。

sudo vi /etc/mysql/my.cnf

(2)以下の[mysqId]を追加する

最大許容パケット = 20M

2.2 編集モードを終了し、MySQLを再起動します。2.1 (2) の手順に従ってください。

3. 注記

設定後、max_allowed_pa​​cket を照会したところ、16777216 であることがわかりました。これは実際には 16*1024*1024 であり、予想された 20M ではありません。そこで再度確認したところ、Java が多くのメモリを占有しているためにサーバーのメモリ容量が不足している可能性があり、MySQL が自動的にパラメータをリセットしている可能性があることがわかりました。そのため、場合によっては、max_allowed_pa​​cket パラメータを変更した後、しばらくすると MySQL がパラメータをデフォルトの 1024 に自動的にリセットし、同じエラーが再度発生する可能性があります。

<<:  リクエスト IP の最後のセグメントに基づいてトラフィックを分割するように Nginx を構成する方法

>>:  Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

推薦する

CSS でテキストカラーグラデーションを実装する 3 つの方法

Web フロントエンド開発のプロセスでは、UI デザイナーはグラデーション テキストを使用したデザイ...

HTML テーブル マークアップ チュートリアル (6): 暗い境界線の色属性 BORDERCOLORDARK

表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...

WeChat アプレットのカスタム スクロール ビューのサンプル コード

ミニプログラムカスタムスクロールビュースクロールバーさっそくレンダリングを見てみましょうレンダリング...

Vue の計算プロパティの紹介

目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...

HTML におけるいくつかの特殊属性タグの使用法の紹介

以下の属性はブラウザとの互換性があまりありません。 1.transform:rotate(45度) ...

MySQLは挿入を使用して複数のレコードを挿入し、データを一括で追加します。

table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...

MySQL DATEDIFF 関数を使用して 2 つの日付間の時間間隔を取得する方法

説明する2 つの日付間の時間間隔を返します。文法DateDiff(間隔、日付1、日付2 [、週の最初...

React仮想リストの実装

目次1. 背景2. バーチャルリストとは何か3. 関連概念の紹介4. 仮想リストの実装4.1 ドライ...

MySQL アーキテクチャのナレッジポイントの概要

1. データベースとデータベースインスタンスMySQL の研究では、データベースとデータベース イン...

Linux コマンドを素早く習得する 4 つの方法

Linux マスターになりたいなら、いくつかの Linux コマンドを習得することが不可欠です。 L...

MySQLのSQLモードの特徴のまとめ

序文SQL モードは、MySQL がサポートする SQL 構文と、実行されるデータ検証チェックに影響...

960 グリッドシステムの基本原理と使用法

もちろん、CSS はフレームワークを必要とするほど高度ではないと考えて、反対の意見を持つ人もたくさん...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

Mysql の varchar 型に関する注意点

varchar の保存ルール4.0 未満のバージョンでは、varchar(20) は 20 バイトを...

Antdesign-vueとsortablejsを組み合わせて、2つのテーブルをドラッグして並べ替える機能を実現

目次成果を達成するsortablejs の紹介具体的な実装成果を達成する最初は、antdesign ...