MySQL データベース接続に失敗しました。エラー: エラー 1040 (HY000): 接続が多すぎます

MySQL データベース接続に失敗しました。エラー: エラー 1040 (HY000): 接続が多すぎます

問題の説明:

MySQL に接続すると突然「ERROR 1040 (HY000): Too manyconnections」が表示されます。文字通りの意味では、データベース内の端末が多すぎるはずですが、mysql 設定ファイルを変更することでこの問題を解決できます。

原因分析:

MySQL 接続のデフォルト数は 151 です

解決:

一時的な構成

本番環境のデータベースに最大接続数が表示される場合は、一時的な構成を使用し、構成ファイルを変更して次回の再起動を待つことをお勧めします。データベースにログインできない場合は、まずデータベースに接続されているアプリケーションを停止してください

1. 現在のデータベース接続数を表示します

mysql> show variables like 'max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

2. データベース接続数を変更します (注: デフォルトに戻すには再起動してください)

mysql> set GLOBAL max_connections=500;
Query OK, 0 rows affected (0.00 sec)

3. 変更された最大接続数を確認します。

mysql> show variables like 'max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 500   |
+-----------------+-------+
1 row in set (0.00 sec)

永続的な構成

1. mysql 設定ファイル my.cnf を開きます。

[mysqld]
max_connections = 500

max_connections フィールドを見つけて、最大接続数を
500 を超える値に変更し、変更を完了して、サーバーを再起動します。

Mysql は接続数をチェックします (接続の合計数、アクティブな接続の数、同時接続の最大数)。

mysql> show status like 'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 1     |
| Threads_created   | 1     |
| Threads_running   | 2     |
+-------------------+-------+
4 rows in set (0.01 sec)

Threads_connected: この値は、開いている接続の数を指します。

Threads_running: この値は、アクティブ化された接続の数を指します。この値は、通常、接続された値よりもかなり低くなります。

Threads_connected は show processlist と同じ結果を持ち、現在の接続数を示します。正確には、Threads_running は現在の同時実行数を表します。

MySQL サーバーの正常かつスムーズな動作を確保するには、MySQL サーバーのスレッド数が適切な範囲内である必要があります。Threads_createdは作成されたスレッド数を示しており、Threads_createdを見ることでMySQLサーバーのプロセス状況を確認することができます。

mysql> show global status like 'Thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 1     |
| Threads_created   | 1     |
| Threads_running   | 2     |
+-------------------+-------+
4 rows in set (0.00 sec)

MySQL サーバー構成ファイルで thread_cache_size を設定すると、クライアントが切断されたときに、このクライアントを処理するサーバーのスレッドは破棄されずにキャッシュされ、次のクライアントに応答します (キャッシュの数が上限に達していない場合)。

Threads_created は、作成されたスレッドの数を示します。Threads_created の値が大きすぎることが判明した場合は、MySQL サーバーがスレッドを作成していることを示しますが、これも比較的リソースを大量に消費します。構成ファイル内の thread_cache_size 値を適切に増やすことができます。そして、サーバーの thread_cache_size の値をクエリします。

mysql> show variables like 'thread_cache_size';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 100    |
+-------------------+-------+
1 row in set (0.01 sec)

コマンド: show processlist;
root アカウントの場合、すべてのユーザーの現在の接続を確認できます。別の通常のアカウントの場合は、自分が占有している接続のみが表示されます。
show processlist コマンドでは、最初の 100 項目のみがリストされます。すべてをリストしたい場合は、show full processlist を使用してください。

mysql> show processlist;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL | Daemon  | 2405 | Waiting on empty queue | NULL             |
|  8 | root            | localhost | NULL | Query   |    0 | init                   | show processlist |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

コマンド: ステータスを表示;

mysql>show status like '%变量名%';

変数名は次のとおりです。
Aborted_clients クライアントが接続を適切に閉じずに切断されたために放棄された接続の数。
Aborted_connects MySQL サーバーへの接続試行が失敗した回数。
接続 MySQL サーバーへの接続を試行した回数。
Created_tmp_tables ステートメントの実行時に作成された暗黙的な一時テーブルの数。
Delayed_insert_threads 使用中の遅延挿入プロセッサ スレッドの数。
Delayed_writes INSERT DELAYED で書き込まれた行の数。
Delayed_errors INSERT DELAYED で書き込まれた、エラー (重複キー値の可能性) があった行の数。
Flush_commands FLUSH コマンドが実行された回数。
Handler_delete テーブルからの行の削除が要求された回数。
Handler_read_first は、テーブルの最初の行を読み取る回数を要求します。
Handler_read_key は、キーに基づいて読み取る行数を要求します。
Handler_read_next キーに基づいて行の読み取りを要求された回数。
Handler_read_rnd は、固定位置に基づいて行を読み取る回数を要求します。
Handler_update テーブル内の行の更新が要求された回数。
Handler_write テーブルへの行の挿入が要求された回数。
Key_blocks_used キーのキャッシュに使用されるブロックの数。
Key_read_requests キャッシュからキー値を読み取るリクエストの数。
Key_reads キー値がディスクから物理的に読み取られた回数。
Key_write_requests キーワード ブロックのキャッシュへの書き込みがリクエストされた回数。
Key_writes キーと値のブロックが物理的にディスクに書き込まれる回数。
Max_used_connections 同時に使用される接続の最大数。
Not_flushed_key_blocks キー キャッシュ内で変更されたが、まだディスクにフラッシュされていないキー ブロック。
Not_flushed_layed_rows INSERT DELAY キューへの書き込みを待機している行の数。
Open_tables 開いているテーブルの数。
Open_files 開いているファイルの数。
Open_streams 開いているストリームの数 (主にログ記録に使用されます)
Opened_tables 開かれているテーブルの数。
質問 サーバーに送信されたクエリの数。
Slow_queries long_query_time よりも長い時間がかかるクエリの数。
Threads_connected 現在開いている接続の数。
Threads_running スリープしていないスレッドの数。
Uptime サーバーが稼働していた時間 (秒単位)。

おすすめ

転載: blog.csdn.net/weixin_46010834/article/details/130102297