本日正午、開発およびテスト環境の 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コンテナを終了した後も実行を継続する方法
目次1. トラバーサルクラス1. 各2. 地図3. すべての4. いくつか5. フィルター6. 減ら...
最近、Microsoft は Docker をネイティブにサポートする Windows Server...
目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...
1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...
MySQL バージョン: MySQL Community Edition (GPL) ------ ...
目次ナンセンス文章最初ルーター/index.js 2番目1. プラグインをインストールする2.mai...
Linux で FTP サーバーを設定するためのチュートリアルを参照してください https://w...
目次Node.js の公式紹介Node.jsのコア開発言語ウェブ上の JavaScript と No...
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
最近、 Ubuntu 20.04でkazamを使用して録音しているときに、問題が見つかりました。シス...
IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...
目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...
目次プロジェクトでデータベースを操作する3つのステップデータベースを操作するための具体的な手順1: ...
目次1. v-text (v-instruction name = "variable&q...
異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....