はじめに
不要なMySQLプロセスは、システムのパフォーマンスの問題を引き起こす可能性があります。時間の経過とともに、アクティブなスレッドが蓄積されてサーバーが停止し、ユーザーがテーブルにアクセスしてリクエストを実行できなくなります。
リソースの使用率が非常に高い場合は、MySQLプロセスを強制終了する必要があります。 このガイドでは、MySQLプロセスを識別してプロセスを強制終了する方法を説明します。
前提条件
- コマンドライン/ターミナルウィンドウへのアクセス
- MySQLまたはMariaDBがインストールされています
- sudoのユーザー またはルート 特権
MySQLプロセスリストを見つける方法
プロセスを見つけて強制終了する前に、ローカルまたはリモートのMySQLサーバーにアクセスする必要があります。 rootとしてMySQLローカルアカウントにログインするには、ターミナルを開いて次のように入力します。
mysql -u root -p
プロンプトが表示されたら、パスワードを入力します。 MySQLシェルがロードされると、プロンプトに mysql>
が表示されます。 。
強制終了または終了するプロセスを見つけるには、アクティブなすべてのセッションを含むリストをロードします。
MySQLシェルでは、次のクエリを使用します:
SHOW PROCESSLIST;
出力には次の情報が表示されます:
リストにさらにエントリがある場合があります。 Id
に注意してください あなたが殺したいプロセスの。 Time
列は、最も長く実行されているプロセスを判別するのに役立ちます。これらは通常、最初に終了したいものです。
MySQLプロセスを強制終了する方法
リストからMySQLセッションを強制終了するには、 KILL
を使用します クエリの後にスレッドId
先ほどお書きしました。
KILL 14;
シェルには、クエリのステータスと影響を受ける行の数が表示されます。「クエリOK、影響を受ける行は0(0.06秒) 。」 このクエリは、接続に関連するすべての操作を含む、データベースへの接続を終了します。
プロセスを強制終了するには、ユーザーが適切な権限を持っている必要があることに注意してください。
特定のユーザーのすべてのMySQLプロセスを強制終了する方法
MySQLには、すべてのプロセスを強制終了するための固有のコマンドはありません。
特定のユーザーのすべてのプロセスを強制終了するには、 CONCAT
を使用します スレッドとステートメントのリストを含むファイルを作成します。この例では、 rootと入力しました ユーザーとして。別のユーザーを指定するには、 rootを置き換えます 希望のユーザー名で。
SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/process_list.txt';
このクエリにより、 process_list.txtというファイルが作成されました。 。名前はお好みに合わせて編集できます。ファイルを開き、それらが強制終了するプロセスであるかどうかを確認します。準備ができたら、次のように入力します。
SOURCE /tmp/process_list.txt;
クエリに条件を追加して、出力ファイル内のプロセスのリストを絞り込むことができます。たとえば、 time > 1000
を追加します 時間値が1000より大きいプロセスのみを含めるようにコマンドに追加します。
SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE user='root' and time>1000 INTO OUTFILE '/tmp/process_list.txt';