MySQL 8.0 の新機能 - 管理ポートの使用の概要

MySQL 8.0 の新機能 - 管理ポートの使用の概要

序文

皆さんの多くは、次のようなエラー メッセージに遭遇したことがあると思います。この問題が発生した場合、どうすればよいでしょうか? 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の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 のインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 リリースノートのいくつかの改善点
  • Java から MySQL 8.0 JDBC に接続するための詳細な手順 (IDEA バージョン)
  • MySQL 8.0 のメモリ消費の詳細な分析
  • MySql8.023 インストール プロセスの詳細なグラフィック説明 (初回インストール)
  • MySQL 8.0 の新機能 - チェック制約の紹介
  • mysql8.0.23 msi インストールの超詳細なチュートリアル
  • MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル
  • win10 で mysql8.0.23 をインストールし、「サービスが制御機能に応答しません」という問題を解決する方法
  • MySQL 8.0 の非表示列に対する基本操作

<<:  Docker が MySQL イメージをプルするのが遅すぎる問題を解決する

>>:  Tudou.comのホームページのデザイン方法

推薦する

MySQLデータベースを作成し、中国語の文字をサポートする方法

まずMySQLの公式ドキュメントを見てみましょう: 5.7 {データベース | スキーマ} を作成 ...

Linux ディスクのマウント、パーティション分割、容量拡張操作を実装する方法

基本概念操作の前に、まずいくつかの基本的な概念を理解する必要がありますディスクLinux システムで...

bash スクリプトで ssh/scp コマンドにパスワードを渡す方法の詳細な説明

SSHPASSをインストールする最新のオペレーティング システムでは、sshpass パッケージはデ...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

3Dカルーセル効果を実現するjs

この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...

React コンポーネント通信ルーティングパラメータ転送 (react-router-dom)

目次最近Reactを勉強していて、今は仕事でVueを使っています。学習の過程で、両者を比較して理解を...

vue-cropper を使用して vue で写真をトリミングする方法をご存知ですか?

目次1. インストール: 2. 使用方法: 3. 組み込みメソッド: 4. 使用方法:要約する公式サ...

MYSQL サブクエリとネストされたクエリの最適化例の分析

ゲーム史上最高スコアトップ100をチェックSQLコード cdb_playsgame ps から ps...

vue3.0 でカルーセル コンポーネントをカプセル化する手順

目次1: カプセル化の考え方2. 包装工程3: ドットインジケーター4: 左と右のインジケーター5:...

docker createコマンドの使用方法

docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...

Centos7.3は起動時に自動的に起動または指定されたコマンドを実行します

Centos7では、/etc/rc.d/rc.localファイルの権限が削減されており、実行権限があ...

企業サイトとコラム辞典 中国語と英語の比較 中国語と英語のバイリンガル企業サイトを作る仲間は

名前キャラクター名前キャラクター情報ニューステクノロジー技術スキンケアスキンケア補う補う香水香水化粧...

WeChatアプレットで画像の幅と高さを取得する方法

起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...