本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告されました。問題から判断すると、接続プールがいっぱいになり、すべての接続が利用できなくなっている可能性があります。 この場合、最も直接的な方法は、最大接続数をリセットすることです。接続数に関する 2 つのパラメータが含まれている my.cnf ファイルを確認します。 max_connections: 最大接続数 max_user_connections: ユーザー接続の最大数 最初のパラメータはインスタンスの最大接続数を決定し、2 番目のパラメータは単一ユーザーの最大接続数を決定します。 一般的なオンライン環境では、安全上の理由から、これら 2 つのパラメータを同じ値に設定することはできません。max_user_connections パラメータは、1 人のユーザーがすべての接続プールを占有するのを防ぐために、一定の余裕を持たせて少し小さめに設定することができます。 上記の問題を見たとき、私の最初の反応は、ログインしていくつかの接続を切断することでした。しかし、ログインしようとすると、ログインできなくなっていました。DBA 管理アカウント dba_admin でも接続を確立できなくなりました。エラー ログを表示します。 2019-08-12T06:02:42.928412Z 0 [警告] 接続が多すぎます 2019-08-12T06:02:42.930181Z 0 [警告] 接続が多すぎます 2019-08-12T06:02:44.595199Z 0 [警告] 接続が多すぎます 2019-08-12T06:02:44.597160Z 0 [警告] 接続が多すぎます 2019-08-12T06:02:44.782042Z 0 [警告] 接続が多すぎます いずれも接続数が多すぎます。幸い、開発環境なので、このような場合は、データベース サービスを停止して再起動し、最大接続数を再度増やすという方法を使用できます。もちろん、この増加量を考慮する必要があります。一般的には、wait_timeout 値、つまり待機タイムアウトと組み合わせて設定する必要があります。一般的に、wait_timeout 値が比較的大きい場合、接続数が多くなることが多く、接続ごとに約 2M のメモリが消費されます。接続数を増やすと、メモリが不足する可能性があります。wait_timeout 値を比較的小さく設定すると、接続が絶えず作成および破棄され、特定の IO リソースが浪費されます。 したがって、MySQL の公式ドキュメントで説明されているように、バランスの取れた値を取得する方法が鍵となります。 公式ドキュメントによると、数 GB のメモリがあれば、500 ~ 1000 の接続数を設定することができます。実際、この範囲の値であればほとんどのニーズを満たすことができます。 さらに、公式ドキュメントにも非常に優れた機能について記載されています。
実際、許可される接続の最大数は、max_connections + 1 接続の値です。最後の追加接続は、スーパー権限を持つユーザー用です。このように、接続が使い果たされた場合は、スーパー権限でログインし、show processlist メソッドを使用して接続を表示し、不要な接続をいくつか切断してサービスを再び利用できるようにすることができます。 しかし、実際のアプリケーションでは、利便性のために不要なアカウントにスーパー権限を割り当てることが多く、その結果、スーパー権限を持つ一般ユーザーが余分な接続を占有することになります。今日の問題では、このような設定は役に立たず、結局 1 つの接続では少なすぎるため、ログインできません。他のアカウントがすでにこのスーパー接続を占有している場合、このインスタンスには依然としてアクセスできません。 この場合、MySQL インスタンスを再起動し、my.cnf ファイルで最大接続数を変更する以外に、サービスを停止せずに処理する方法はありますか? 答えは「はい」です。ただし、前提条件があり、サービスは Percona サーバーである必要があります。MySQL の公式バージョンを使用する場合、この方法は機能しません。MariaDB でもこの方法を使用できると言われています。テストしたことがなく、よく理解していません。興味がある場合は、テストできます。
上記は、Percona-Server の公式サイトでの説明です。接続プールが占有された後のログイン問題は、他の 2 つのパラメータによって解決できます。 mysql:(なし) 22:12:51>> '%extra%' のような変数を表示します。 +----------------------------------+-------+ | 変数名 | 値 | +----------------------------------+-------+ | 追加最大接続数 | 10 || 追加ポート | 43130 | +----------------------------------+-------+ セット内の 2 行 (0.00 秒) これらは 2 つのパラメータで、1 つは extra_max_connections、もう 1 つは extra_port です。これら 2 つのパラメータにより、サーバーに接続するための追加の接続と追加のポートを使用できるようになります。これにより、show processlist を使用して接続ステータスを監視し、不要な接続をいくつか切断し、サーバーを再び使用可能にすることができます。 ただし、MySQL コミュニティがこの機能と重複する admin_port を実装したため、Percona Server 8.0.14 以降では extra_port が削除されていることに注意してください。したがって、Percona Server 8.0.14 にアップグレードするときは、必ず my.cnf を編集し、extra_port がすでに定義されている場合は更新してください。 最後に、接続を見てみましょう。この例では、extra_port を 43130 に設定しています。 [root@ ログ]# /usr/local/mysql/bin/mysql -udba_admin -p -h127.0.0.1 -P4313 パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは71920です サーバー バージョン: 5.7.16-10-log Percona Server (GPL)、リリース 10、リビジョン a0c7d0d Copyright (c) 2000, 2011, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 [email protected]:(なし) 22:40:59>>終了 さよなら --------------------------------------------------------------------------- [root@ ログ]# /usr/local/mysql/bin/mysql -udba_admin -p -h127.0.0.1 -P43130 パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは71941です サーバー バージョン: 5.7.16-10-log Percona Server (GPL)、リリース 10、リビジョン a0c7d0d Copyright (c) 2000, 2011, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 [email protected]:(なし) 22:41:05>> 概要
接続数が最大値を超えた場合は、まず新しいスーパーアカウントでログインして、直接ログインできるかどうかを確認してください。直接ログインできない場合は、サービスを停止してから接続数をリセットし、サービスを再起動するしかありません。
接続数がいっぱいにならないように、事前に extra_port を設定することをお勧めします。このような事態が発生し、事前に設定されていない場合は、再発を防ぐためにサービスを停止した後に補足することをお勧めします。 上記は、MySQL の接続数が多すぎるエラーの原因と解決方法の詳細な内容です。MySQL の接続数が多すぎるエラーの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: モバイル開発チュートリアル: ピクセル表示の問題の概要
>>: Dockerコンテナを終了した後も実行を継続する方法
ページ上の画像を強調表示することは非常に一般的です。ここでは、jQuery を使用して画像を強調表示...
目次ここでの問題は次の通りです:解決策1:解決策2: コンストラクタで初期化を割り当てる採掘場の概要...
作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...
目次シャロークローニングとディープクローニングとは何ですか? 1. アレイのクローンを作成する1.1...
私のシステムとソフトウェアのバージョンは次のとおりです。システム環境: win7、64ビットMySQ...
HTML でフォームの送信を無効にする方法は 2 つあります。 1. コントロールタグにreadon...
質問今日、プロジェクト関数を書いていたとき、金額の統計計算を行い、単位を変換する必要がありました。そ...
複数の注文を含むリストが必要です。各注文は一意にすることも、複数の注文を結合することもできます。各注...
落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...
今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...
1. Apache Tomcat 公式サイトから Tomcat 圧縮パッケージをダウンロードします。...
私は現在、自分自身の小さなプログラム プロジェクトに取り組んでいます。プロフェッショナルなフロントエ...
この記事では、MySQL の単一テーブル クエリ操作について説明します。ご参考までに、詳細は以下の通...
目次予備的注釈問題の再現データ削除の原則データの再利用どの操作がデータホールの原因になりますか?表領...
1. 複合主キーいわゆる複合主キーとは、テーブルの主キーが複数のフィールドで構成され、ビジネス上の意...