序文皆さんの多くは、次のようなエラー メッセージに遭遇したことがあると思います。この問題が発生した場合、どうすればよいでしょうか? MySQL 5.7 以前のバージョンでは、「接続が多すぎます」というエラーが表示され、スーパーユーザー root でログインできません。インスタンスを再起動する以外に、良い解決策はありません。しかし、MySQL 8.0 では、接続管理にいくつかの最適化が行われました。見てみましょう。 エラー 1040 (HY000): 接続が多すぎます 接続管理MySQL 8.0 では、接続管理に 2 つの大きな変更が加えられました。1 つは追加の接続を許可すること、もう 1 つは専用の管理ポートです。 追加の接続MySQL 8.0 では、現在の接続数が最大接続数に達すると、サーバーは 1 つの追加接続を許可し、CONNECTION_ADMIN 権限を持つユーザーが接続できるようにします。簡単なテストを行ってみましょう。 (1)テストを容易にするために、まず接続の最大数を調整する mysql> グローバル max_connections=3 を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) (2)最大接続数に達するまでセッションを開く mysql> プロセスリストを表示します。 +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | 15 | event_scheduler | localhost | NULL | デーモン | 154190 | 空のキューを待機中 | NULL | | 54 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 55 | テスト | 127.0.0.1:59120 | NULL | スリープ | 19 | | NULL | | 56 | テスト | 127.0.0.1:59136 | NULL | スリープ | 9 | | NULL | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ セット内の 4 行 (0.00 秒) mysql> 'threads_connected' のようなグローバル ステータスを表示します。 +-------------------+------+ | 変数名 | 値 | +-------------------+------+ | スレッド接続数 | 3 | +-------------------+------+ セット内の 4 行 (0.01 秒) (3)通常のユーザーテストでは接続を試み、「接続が多すぎます」というエラーメッセージが報告される $ mysql -utest -p -h127.0.0.1 -P10080 パスワードを入力してください: エラー 1040 (08004): 接続が多すぎます (4)スーパーユーザールートが接続に成功する $ mysql -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは60です サーバーバージョン: 8.0.20 MySQL コミュニティサーバー - GPL Copyright (c) 2000, 2020, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 マイSQL> (5)現在の接続数を再度確認する(max_connections + 1) +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | 15 | event_scheduler | localhost | NULL | デーモン | 155064 | 空のキューを待機中 | NULL | | 54 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 55 | テスト | 127.0.0.1:59120 | NULL | スリープ | 893 | | NULL | | 56 | テスト | 127.0.0.1:59136 | NULL | スリープ | 883 | | NULL | | 60 | ルート | ローカルホスト | NULL | スリープ | 141 | | NULL | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ セット内の行数は 5 です (0.00 秒) mysql> 'threads_connected' のようなグローバル ステータスを表示します。 +-------------------+------+ | 変数名 | 値 | +-------------------+------+ | スレッド接続数 | 4 | +-------------------+------+ セット内の 4 行 (0.00 秒) (6)スーパーユーザーrootが再度接続を試みますが、「接続数が多すぎます」というエラーメッセージも表示されます。 $ mysql -uroot -p パスワードを入力してください: エラー 1040 (HY000): 接続が多すぎます 上記のテストから、MySQL 8.0 では許可される接続数は max_connections+1 であり、この追加接続は CONNECTION_ADMIN 権限を持つユーザーにのみ許可されることがわかります。この追加の接続を通じて、DBA はスーパーユーザー root を使用して接続し、セッションの強制終了などの管理操作を実行してインスタンスを直接再起動するのを回避し、コストを削減して効率を向上させることができます。 管理ポートある程度、接続が多すぎるという問題に対して、追加の接続によって一時的な解決が得られます。ただし、追加の接続は 1 つだけなので、「接続が奪われる」や「端末が異常に切断される」などの事故が発生する可能性があります。そのため、MySQL 8.0.14 バージョンでは、非常に重要な新機能である管理ポートが導入されました。これにより、SERVICE_CONNECTION_ADMIN 権限を持つユーザーは、接続数に制限なく、特定の IP と PORT を介して接続できるようになります。 (1)まず関連するパラメータを導入する admin_address: リスニングIPアドレス admin_port: リスニングポート create_admin_listener_thread: 管理接続をリスニングするための別のスレッドを作成するかどうか (2)上記のパラメータを設定することで、管理ポートを有効にすることができます。 mysql> 'admin%' のようなグローバル変数を表示します。 +---------------+-----------+ | 変数名 | 値 | +---------------+-----------+ | 管理者アドレス | 127.0.0.1 | | 管理者ポート | 33062 | +---------------+-----------+ セット内の 2 行 (0.00 秒) # netstat -lntp | grep 33062 tcp 0 0 127.0.0.1:33062 0.0.0.0:* LISTEN 20042/mysqld (3)次にテスト mysql> プロセスリストを表示します。 +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | 15 | event_scheduler | localhost | NULL | デーモン | 168750 | 空のキューを待機中 | NULL | | 54 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 55 | テスト | 127.0.0.1:59120 | NULL | スリープ | 14579 | | NULL | | 56 | テスト | 127.0.0.1:59136 | NULL | スリープ | 14569 | | NULL | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ セット内の 4 行 (0.00 秒) mysql> 'threads_connected' のようなグローバル ステータスを表示します。 +-------------------+------+ | 変数名 | 値 | +-------------------+------+ | スレッド接続数 | 3 | +-------------------+------+ セット内の 1 行 (0.00 秒) (4)通常のユーザーテストでは接続を試み、「接続が多すぎます」というエラーメッセージが報告されます。 $ mysql -utest -p -h127.0.0.1 -P10080 パスワードを入力してください: エラー 1040 (08004): 接続が多すぎます (5)スーパーユーザールートは管理ポートを介して正常に接続を試みる $ mysql -uroot -p -h127.0.0.1 -P33062 パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは62です サーバーバージョン: 8.0.20 MySQL コミュニティサーバー - GPL Copyright (c) 2000, 2020, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 マイSQL> (6)さらにいくつかのセッションを開き、スーパーユーザールートを使用し、管理ポートを介して正常に接続し、最大接続数max_connectionsによって制限されない。 mysql> プロセスリストを表示します。 +----+-+---------------------------------+-------+---------+--------+------------------------+------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ | 15 | event_scheduler | localhost | NULL | デーモン | 169035 | 空のキューを待機中 | NULL | | 54 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 55 | テスト | 127.0.0.1:59120 | NULL | スリープ | 14864 | | NULL | | 56 | テスト | 127.0.0.1:59136 | NULL | スリープ | 14854 | | NULL | | 62 | ルート | 127.0.0.1:47660 | NULL | スリープ | 151 | | NULL | | 63 | ルート | 127.0.0.1:47760 | NULL | スリープ | 52 | | NULL | | 64 | ルート | 127.0.0.1:47768 | NULL | スリープ | 43 | | NULL | | 65 | ルート | 127.0.0.1:47780 | NULL | スリープ | 35 | | NULL | | 66 | ルート | 127.0.0.1:47790 | NULL | スリープ | 24 | | NULL | | 67 | ルート | 127.0.0.1:47800 | NULL | スリープ | 16 | | NULL | | 68 | ルート | 127.0.0.1:47808 | NULL | スリープ | 8 | | NULL | +----+-+---------------------------------+-------+---------+---------+------------------------+------------------+ セット内の行数は 11 です (0.00 秒) mysql> 'threads_connected' のようなグローバル ステータスを表示します。 +-------------------+------+ | 変数名 | 値 | +-------------------+------+ | スレッド接続数 | 10 | +-------------------+------+ セット内の 1 行 (0.00 秒) 新しい管理ポート機能により、DBA は接続数が多すぎるという問題を心配する必要がなくなったと言えます。 要約するMySQL 8.0 では、接続数が多すぎるという状況に対処するために、追加接続と管理ポートという 2 つの新機能が導入され、DBA が問題を便利かつ迅速に解決できるようになりました。ただし、これはあくまでも一時的な緊急措置です。最も根本的な理由は、アプリケーション側の構成 (同時実行制限、SQL パフォーマンス、接続プール構成など) を確認して、このような問題を完全に回避することです。 以上がMySQL 8.0の新機能である管理ポートの使い方の紹介の詳しい内容です。MySQL 8.0の新機能である管理ポートの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Docker が MySQL イメージをプルするのが遅すぎる問題を解決する
まずMySQLの公式ドキュメントを見てみましょう: 5.7 {データベース | スキーマ} を作成 ...
基本概念操作の前に、まずいくつかの基本的な概念を理解する必要がありますディスクLinux システムで...
SSHPASSをインストールする最新のオペレーティング システムでは、sshpass パッケージはデ...
この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...
この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...
目次最近Reactを勉強していて、今は仕事でVueを使っています。学習の過程で、両者を比較して理解を...
目次1. インストール: 2. 使用方法: 3. 組み込みメソッド: 4. 使用方法:要約する公式サ...
ゲーム史上最高スコアトップ100をチェックSQLコード cdb_playsgame ps から ps...
目次1: カプセル化の考え方2. 包装工程3: ドットインジケーター4: 左と右のインジケーター5:...
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...
Centos7では、/etc/rc.d/rc.localファイルの権限が削減されており、実行権限があ...
名前キャラクター名前キャラクター情報ニューステクノロジー技術スキンケアスキンケア補う補う香水香水化粧...
起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...
序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...
目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...