MySQL システム ユーザーが開くことができるファイルの最大数に関する簡単な説明

MySQL システム ユーザーが開くことができるファイルの最大数に関する簡単な説明

本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません...私は自分の愚かなトラブルシューティングのプロセスを記録します。

先週、立ち上げたばかりのシステムで、再度ログインできないという報告が出始めました。このシステムでは最近この問題が発生しており、開発者もその問題を探していたため、私たちはあまり注意を払っていませんでした。そこで、オペレーティング システムにログインし、mysql -uroot -p を使用してデータベースにログインしましたが、何も起こらず、ログインできませんでした...

説明すると、MySQL は mysql ユーザーの下にインストールされます。データベース パラメータはインストール中に調整されますが、オペレーティング システム レベルでは調整は行われません。したがって、mysql ユーザーのオープン ファイルの最大数はデフォルトの 1024 に制限されており、ulimit -n を使用して照会できます。その後、mysql の root アカウントでデータベースにログインした状態で、mysql の system ユーザーでもログインし、そのときのサーバー負荷を確認しました。CPU やメモリなどは正常でしたが、データベースに接続しているアプリケーションが多数存在していました。

この時点で問題は明らかです。システム ユーザーが開いた mysql ファイルの数が最大制限に達した可能性があり、当然、これ以上の接続を開くことはできません。

しかし、当時はこれに思い至りませんでした。私が考えたのは、ログインするシステムユーザーを変更するのではなく、アプリケーションを停止するのではなく、データベースを再起動することでした。 。 。さらに、このデータベースは、どれも重要なビジネスではないものの、1 つのビジネスだけではなく複数のビジネスを運営しています。 。 。

そこで、mysql ユーザーで mysqladmin -uroot -p shut down を実行し、データベースを再起動する準備をしました。これは間違いなく応答しないでしょう。理由は、以前のルートアカウントがデータベースに接続できないのと同じです。Ctrl + Cの後、次のエラーが報告されます

^Cmysqladmin: 'localhost' のサーバーへの接続に失敗しました
エラー: 「初期通信パケットを待機中」で MySQL サーバーへの接続が失われました。システム エラー: 4

その後、データが失われるかもしれないと思ったにもかかわらず、さらに愚かなことをして、mysql プロセスを強制終了しました。 。 。その後、mysql を再起動すると、システムが利用可能になります。それは本当に愚かなことでした。それを終えた後、すぐに、もっと良い対処法がたくさんあることを思い出しましたが、私は最も愚かな方法を選択しました。

今日、データベースに再度ログインしたところ、max_connections、table_open_cache など、いくつかのパラメータが設定ファイルに書き込んだものと異なっており、すべてデフォルト値に設定されていました。最後の起動ログを確認したところ、確かに警告がありました。

2019-03-15T08:14:03.038750Z 0 [警告] 制限が変更されました: max_open_files: 1024 (要求数 12010)
2019-03-15T08:14:03.038911Z 0 [警告] 制限が変更されました: max_connections: 214 (要求数 2000)
2019-03-15T08:14:03.038916Z 0 [警告] 制限が変更されました: table_open_cache: 400 (要求 5000)

明らかに、mysql はパラメータ設定に基づいてインスタンスが開く必要があるファイルの最大数を計算しましたが、これは現在のシステムユーザーの最大制限を超えているため、パラメータは使用されず、デフォルト値が使用されます。もちろん、起動後もデータベースは利用可能であり、起動後にパラメータを手動で設定することもできます。

グローバルmax_connections=2000を設定します。
グローバルtable_open_cacheを5000に設定します。

ただし、以前遭遇した問題が発生する可能性があります。つまり、データベース接続数が max_connections 制限に達しず、ユーザーは依然として接続できません。通常の状況では、接続数がいっぱいになった場合でも、MySQL は root ユーザー用の接続を予約するため、root ユーザーはデータベースにログインして問題を確認できることに注意してください。

解決策も非常に簡単です。オペレーティング システム ユーザー mysql の制限値を増やし、構成ファイル /etc/security/limits.conf の後に新しい制限値を追加するだけです。

mysql ソフト nofile 32768
mysql ハード nofile 65535

上記は、私がご紹介したMySQLシステムユーザーのオープンファイルの最大数についての詳細な説明です。お役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL データベースの大文字と小文字の区別の問題
  • Pythonはadbapiを使用してMySQLデータベースの非同期ストレージを実装します
  • MySQL の繰り返し読み取りレベルでファントム読み取りを解決できますか?
  • MySQL の異なるテーブル間でフィールドをコピーする
  • MySQL 最適化ソリューション リファレンス
  • MySQL インデックスの種類 (通常、ユニーク、フルテキスト) の説明
  • MySQLデータベースとテーブルシャーディングの概要
  • MySQLデータベースのストアドプロシージャとトランザクションの違い
  • MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明
  • Mysql は最大接続数を表示し、最大接続数を変更します

<<:  Ubuntu 19でdockerソースをインストールできない問題を共有する

>>:  Vue-cli4 ルーティング構成の詳細な理解

推薦する

Linux での Redis の永続性、マスター スレーブ同期、Sentinel の詳細な説明

1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...

Navicat を使用して MySQL データベースをエクスポートおよびインポートする方法

MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...

JavaScript でシンプルなクリスマス ゲームを実装する

目次序文成果を達成するコードCSSコードJSコードHTMLコードデモンストレーションのプロセス序文ク...

Linux スケジュールタスクの関連操作の概要

皆様の参考と操作を容易にするために、様々な主要ウェブサイトを検索し、関連するスケジュールされたタスク...

MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー

OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。 016-03-03T...

Mariadb リモート ログイン構成と問題解決

序文:インストール プロセスについては詳しく説明しません。問題に直接触れましょう。MySQL のリモ...

AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例

序文最近、仕事でAES_ENCRYPT()関数を使用してプレーンテキストを暗号化し、MySQL に保...

MySQL 8.0.19 のインストールと設定方法のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.19のインストールと設定のグラフィックチュートリアルを記...

vue+tsは要素のマウスドラッグの効果を実現します

この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共...

Linux でユーザーにルート権限を追加する方法の概要

1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...

MySQLへの外部ネットワークアクセスを許可し、MySQLアカウントのパスワードを変更する方法

mysqlのrootアカウント、普段はlocalhostか127.0.0.1で接続しています。会社の...

MySQL および Oracle のバッチ挿入 SQL の一般的な記述例

目次例えば:一般的な執筆:要約する例えば:次に、データベースのUSERテーブルにUserオブジェクト...

JavaScript の組み込み Date オブジェクトの詳細な説明

目次日付オブジェクト日付オブジェクトの作成新しい日付()日付を取得する()取得日()月を取得する()...

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...

Linux DHCPサービスの詳細な説明

目次1. DHCP サービス (動的ホスト構成プロトコル) 1. 背景2. 概要3. 利点4.DHC...