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 データベースの基本的な知識と操作について説明します。ご参考ま...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

CSS の新機能には、コントロールページの再描画と再配置の問題が含まれています

新しい CSS プロパティ contain を紹介する前に、読者はページの再描画と再配置が何であるか...

Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...

vue keep-alive の簡単な概要

1. 機能主にコンポーネントの状態を保持したり、再レンダリングを回避したりするために使用されます。 ...

VUE+SpringBootはページング機能を実装します

この記事では主に、Vue + SpringBoot でページ分割されたリストデータを実装する方法を紹...

Tomcat のパフォーマンス最適化方法の簡単な概要

Tomcat自体の最適化Tomcat メモリ最適化起動時に大きなメモリ ブロックが必要であることを ...

MySQL で 2 つのデータベース テーブル構造を比較する方法

開発およびデバッグのプロセスでは、新しいコードと古いコードの違いを比較する必要があります。比較には、...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

mysql5.7でbinlogを使用してデータを復元する方法

ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...

CentOS7にPostgreSQL11をインストールする方法

CentOS 7にPostgreSQL 11をインストールする PostgreSQL: 世界で最も先...

MySQLの基本を素早く学ぶ

目次SQLを理解するSELECTを理解するエイリアス定数をクエリし、固定定数列を追加します。重複行を...