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 のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

推薦する

MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法

1. デフォルトでインストールされているMySQLの文字セットを確認するmysql> '...

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...

フォームのmethod=post/getの違い

フォームは、get と post の 2 つのデータ転送方法を提供します。どちらもデータを送信する方...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

IE イメージ ツールバーを無効にする

IE6 で試してみたところ、ツールバーが表示されました。オプションに「イメージ ツールバーを有効にす...

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....

初心者向け入門チュートリアル④:サブディレクトリのバインド方法

これが何を意味するのかを理解するには、まずサブディレクトリとは何かを知る必要があります。では、サブデ...

WeChatアプレットはキャンバスを使用して時計を描画します

この記事では、キャンバスを使用してWeChatアプレットに時計を描く具体的なコードを参考までに共有し...

Vue ページ監視ユーザープレビュー時間機能実装コード

最近のビジネスでは、オンライン トレーニング システムが特定のオンライン プレビュー ページに対する...

Docker を使用して Django プロジェクトをデプロイする方法の例

また、Dockerを使用してDjangoプロジェクトをデプロイするのも非常に簡単です。とても良いです...

Windows10 mysql 8.0.12 非インストール版 設定 起動方法

この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...

MySQL トリガーの定義と使用方法の簡単な例

この記事では、MySQL トリガーの定義と使用方法について説明します。ご参考までに、詳細は以下の通り...

MySQL の完全バックアップとクイックリカバリ方法

過去 15 日間のデータをバックアップするシンプルな MySQL 完全バックアップ スクリプト。バッ...

Zabbixで指定時間内の変化値を設定する方法の詳細な説明

背景説明: 既存の負荷分散装置には、付加価値状態にある指標があります (増加するだけで減少しないため...

JavaScript でのカスタム スワイパー コンポーネントの詳細な説明

目次エフェクト表示コンポーネント設定ステップ1ステップ2ステップ3コンポーネントの使用ステップ1ステ...