MySQL 8.0 リファレンスマニュアル


13.7.8.8 RESTART ステートメント

RESTART

このステートメントは、MySQL サーバーを停止して再起動します。 SHUTDOWN 権限が必要です。

RESTART の使用例としては、サーバーホスト上の MySQL サーバーを再起動するためのコマンドラインアクセスが不可能な場合や便利な場合があります。 たとえば、SET PERSIST_ONLY を実行時に使用して、サーバーの起動時にのみ設定できるシステム変数に構成変更を加えることができますが、これらの変更を有効にするには、サーバーを再起動する必要があります。 RESTART ステートメントは、サーバーホストでのコマンド行アクセスを必要とせずに、クライアントセッション内からこれを実行する方法を提供します。

注記

RESTART ステートメントの実行後、クライアントは現在の接続が失われることを期待できます。 自動再接続が有効な場合、サーバーの再起動後に接続が再確立されます。 それ以外の場合は、接続を手動で再確立する必要があります。

RESTART 操作が成功するには、再起動のために実行されたサーバーの停止を検出するための監視プロセスが使用可能な環境で mysqld が実行されている必要があります:

  • モニタリングプロセスが存在する場合、RESTART は、モニタリングプロセスが新しい mysqld インスタンスを起動する必要があると判断できるように mysqld を終了させます。

  • 監視プロセスが存在しない場合、RESTART はエラーで失敗します。

これらのプラットフォームは、RESTART ステートメントに必要な監視サポートを提供します:

  • Windows (mysqld が Windows サービスまたはスタンドアロンとして起動された場合)。(mysqld がフォークし、一方のプロセスが他方のプロセスのモニターとして機能し、サーバーとして機能します。)

  • systemd または mysqld_safe を使用して mysqld を管理する Unix および Unix に似たシステム。

mysqldRESTART ステートメントが有効になるように監視環境を構成するには:

  1. mysqld を起動する前に、MYSQLD_PARENT_PID 環境変数を、mysqld を起動するプロセスのプロセス ID の値に設定します。

  2. RESTART ステートメントを使用して mysqld が停止を実行すると、終了コード 16 が返されます。

  3. モニタリングプロセスは、16 の終了コードを検出すると、mysqld を再起動します。 それ以外の場合は終了します。

bash Shell に実装されている最小限の例を次に示します:

#!/bin/bash

export MYSQLD_PARENT_PID=$$

export MYSQLD_RESTART_EXIT=16

while true ; do
  bin/mysqld mysqld options here
  if [ $? -ne $MYSQLD_RESTART_EXIT ]; then
    break
  fi
done

Windows では、RESTART の実装に使用されるフォーキングにより、デバッグを困難にするためにアタッチするサーバープロセスを決定できます。 これを軽減するために、--gdb でサーバーを起動すると、デバッグ環境を設定するために実行されるその他のアクションに加えて、フォーキングが抑制されます。 デバッグ以外の設定では、モニタープロセスの強制を抑制する唯一の目的で --no-monitor を使用できます。 --gdb または --no-monitor を使用して起動されたサーバーの場合、RESTART を実行すると、サーバーは再起動せずに単に終了します。

Com_restart ステータス変数は、RESTART ステートメントの数を追跡します。 ステータス変数はサーバーの起動ごとに初期化され、再起動後も保持されないため、Com_restart の値は通常ゼロですが、RESTART ステートメントが実行されたが失敗した場合はゼロ以外にすることができます。


関連キーワード:  ステートメント, CREATE, TABLE, RESTART, サーバー, DROP, mysqld, サブクエリー, プロセス, FUNCTION