MySQL 5.6 リファレンスマニュアル  /  ...  /  mysqld_safe — MySQL サーバー起動スクリプト

4.3.2 mysqld_safe — MySQL サーバー起動スクリプト

mysqld_safe は、Unix で mysqld サーバーを起動するための推奨される方法です。mysqld_safe は、エラー発生時の再起動やランタイム情報のエラーログファイルへのロギングなど、いくつかの安全機能を追加します。エラーのロギングについては、このセクションで後ほど説明します。

mysqld_safe は、mysqld という名前の実行可能ファイルを起動しようとします。デフォルトの動作をオーバーライドして、起動するサーバーの名前を明示的に指定するには、mysqld_safe--mysqld オプションまたは --mysqld-version オプションを指定します。--ledir オプションを使用して、mysqld_safe がサーバーを検索するディレクトリを指定することもできます。

mysqld_safe のオプションの多くは、mysqld のオプションと同じです。セクション5.1.3「サーバーコマンドオプション」を参照してください。

mysqld_safe が理解できないオプションは、コマンド行で指定された場合は mysqld に渡されますが、オプションファイルの [mysqld_safe] グループに指定された場合は無視されます。セクション4.2.6「オプションファイルの使用」を参照してください。

mysqld_safe は、オプションファイルの [mysqld][server][mysqld_safe] の各セクションからすべてのオプションを読み取ります。たとえば、[mysqld] セクションを次のように指定すると、mysqld_safe--log-error オプションを検出して使用します。

[mysqld]
log-error=error.log

下位互換性のため、mysqld_safe[safe_mysqld] セクションも読み取りますが、[safe_mysqld] セクションを [mysqld_safe] セクションに名前変更することが推奨されます。

mysqld_safe は次のオプションをサポートします。また、オプションファイルを読み取り、セクション4.2.7「オプションファイルの処理に影響するコマンド行オプション」に説明されている、それらを処理するためのオプションもサポートします。

表 4.1 mysqld_safe のオプション

形式 説明
--basedir MySQL インストールディレクトリへのパス
--core-file-size mysqld が作成できるべきコアファイルのサイズ
--datadir データディレクトリへのパス
--defaults-extra-file 通常のオプションファイルに加えてオプションファイルを読み取る
--defaults-file 指名されたオプションファイルのみを読み取る
--help ヘルプメッセージを表示して終了
--ledir サーバーが置かれているディレクトリへのパス
--log-error 指定されたファイルにエラーログを書き込み
--malloc-lib mysqld で使用する代替 malloc ライブラリ
--mysqld 起動するサーバープログラム名 (ledir ディレクトリの)
--mysqld-version サーバープログラム名のサフィクス
--nice サーバーのスケジュール設定の優先順位を設定するために nice プログラムを使用
--no-defaults オプションファイルを読み取らない
--open-files-limit mysqld が開くことができるファイル数
--pid-file プロセス ID ファイルのパス名
--plugin-dir プラグインがインストールされているディレクトリ
--port TCP/IP 接続を待機するポート番号
--skip-kill-mysqld 迷子の mysqld プロセスの kill を試行しない
--skip-syslog syslog にエラーメッセージを書き込まず、エラーログファイルを使用
--socket Unix ソケット接続を待機するソケットファイル
--syslog syslog にエラーメッセージを書き込み
--syslog-tag syslog に書き込まれるメッセージのタグサフィクス
--timezone TZ タイムゾーン環境変数を指定された値に設定
--user mysqld を、名前が user_name または数値のユーザー ID が user_id であるユーザーとして実行

  • --help

    ヘルプメッセージを表示して終了します。

  • --basedir=path

    MySQL インストールディレクトリへのパス。

  • --core-file-size=size

    mysqld で作成できるべきコアファイルのサイズ。このオプション値は ulimit -c に渡されます。

  • --datadir=path

    データディレクトリへのパス。

  • --defaults-extra-file=path

    通常のオプションファイルに加えて読み取られるオプションファイルの名前。これを使用する場合は、コマンド行の最初のオプションでなければなりません。ファイルが存在しない場合やその他の理由でアクセスできない場合は、サーバーはエラーで終了します。

  • --defaults-file=file_name

    通常のオプションファイルの代わりに読み取られるオプションファイルの名前。これを使用する場合は、コマンド行の最初のオプションでなければなりません。

  • --ledir=path

    mysqld_safe がサーバーを検出できない場合、このオプションを使用してサーバーが置かれているディレクトリのパス名を示します。

  • --log-error=file_name

    指定されたファイルにエラーログを書き込みます。セクション5.2.2「エラーログ」 を参照してください。

  • --malloc-lib=[lib_name]

    システムの malloc() ライブラリの代わりに、メモリー割り当てに使用されるライブラリの名前。パス名を指定することによって任意のライブラリを使用できますが、MySQL 5.6 では Linux 向けのバイナリの MySQL 配布に同梱の tcmalloc ライブラリを使用できるようにするためのショートカット形式があります。特定の構成ではショートカット形式が機能しない可能性があります。その場合は代わりにパス名を指定するようにしてください。

    --malloc-lib オプションは、mysqld が起動するときに、ダイナミックリンクに影響を与え、ローダーがメモリー割り当てライブラリを検出できるように、LD_PRELOAD 環境値を変更します。

    • このオプションが指定されない場合、または値なしで指定された場合 (--malloc-lib=)、LD_PRELOAD は変更されず、tcmalloc を使用する試みは行われません。

    • オプションが、--malloc-lib=tcmalloc と指定された場合、mysqld_safetcmalloc ライブラリを /usr/lib から検索し、次に MySQL pkglibdir の場所 (たとえば、/usr/local/mysql/lib または適切なもの) から検索します。tmalloc が検出された場合は、そのパス名が LD_PRELOAD 値の先頭に追加されて mysqld に渡されます。tcmalloc が見つからない場合は、mysqld_safe はエラーで中止されます。

    • オプションが --malloc-lib=/path/to/some/library と指定された場合、そのフルパスが LD_PRELOAD 値の先頭に追加されます。そのフルパスが、存在しないかまたは読み取り不能なファイルを指している場合は、mysqld_safe はエラーで中止されます。

    • mysqld_safe がパス名を LD_PRELOAD に追加する場合は、その変数がすでに持っている、既存の値の先頭にパスを追加します。

    Linux ユーザーは、次の行を my.cnf ファイルに追加することにより、バイナリパッケージに含まれる libtcmalloc_minimal.so を使用できます。

    [mysqld_safe]
    malloc-lib=tcmalloc
    

    任意のプラットフォームで tcmalloc パッケージを /usr/lib にインストールしたユーザーにも、これらの行は十分です。特定の tcmalloc ライブラリを使用するには、そのフルパス名を指定します。例:

    [mysqld_safe]
    malloc-lib=/opt/lib/libtcmalloc_minimal.so
    
  • --mysqld=prog_name

    ledir ディレクトリにある、起動するサーバープログラムの名前。MySQL のバイナリ配布を使用するが、バイナリ配布以外のデータディレクトリがある場合には、このオプションが必要です。mysqld_safe がサーバーを検出できない場合は、--ledir オプションを使用してサーバーのあるディレクトリへのパス名を示します。

  • --mysqld-version=suffix

    このオプションは --mysqld オプションと類似していますが、サーバーのプログラム名のサフィクスだけを指定します。ベース名は mysqld であるとみなされます。たとえば、--mysqld-version=debug を使用すると、mysqld_safeledir ディレクトリの mysqld-debug プログラムを起動します。--mysqld-version の引数が空の場合、mysqld_safeledir ディレクトリの mysqld を使用します。

  • --nice=priority

    サーバーのスケジュール優先順位を任意の値に設定するには、nice プログラムを使用します。

  • --no-defaults

    オプションファイルを読み取りません。これを使用する場合は、コマンド行の最初のオプションでなければなりません。

  • --open-files-limit=count

    mysqld が開くことができるファイル数。オプション値は ulimit -n に渡されます。

    注記

    これが正しく機能するためには、mysqld_saferoot として起動する必要があります。

  • --pid-file=file_name

    プロセス ID ファイルのパス名。

  • --plugin-dir=path

    プラグインディレクトリのパス名。

  • --port=port_num

    サーバーが TCP/IP 接続を待機するときに使用するポート番号。サーバーが root システムユーザーで開始されている場合を除き、ポート番号は 1024 以上にする必要があります。

  • --skip-kill-mysqld

    起動時に、未処理の mysqld プロセスの強制終了を試行しません。このオプションは、Linux のみで機能します。

  • --socket=path

    サーバーがローカル接続を待機するときに使用する Unix ソケットファイル。

  • --syslog, --skip-syslog

    --syslog は、logger プログラムをサポートするシステムで、エラーメッセージが syslog に送信されるようにします。--skip-syslog は、syslog の使用を抑制し、メッセージはエラーログファイルに書き込まれます。

    syslog が使用される場合、daemon.err syslog 機能/重要度がすべてのログメッセージで使用されます。

  • --syslog-tag=tag

    syslog へのロギングで、mysqld_safe および mysqld からのメッセージはそれぞれ mysqld_safe および mysqld 識別子を付けて書き込まれます。識別子のサフィクスを指定するには、--syslog-tag=tag を使用します。これにより、識別子は mysqld_safe-tag および mysqld-tag に変更されます。

  • --timezone=timezone

    TZ タイムゾーン環境変数を、指定されたオプション値に設定します。正当なタイムゾーン指定形式は、オペレーティングシステムのドキュメントを参照してください。

  • --user={user_name|user_id}

    mysqld サーバーを、名前 user_name または数字ユーザー ID user_id を持つユーザーとして実行します。(このコンテキストでのユーザーは、システムログインアカウントであり、付与テーブルにリストされている MySQL ユーザーではありません。)

mysqld_safe--defaults-file オプションまたは --defaults-extra-file オプションで起動してオプションファイルを指定する場合、そのオプションはコマンド行で指定されるうちの最初のものでなければなりません。そうでない場合は、オプションファイルは使用されません。たとえば、次のコマンドは指定されたオプションファイルを使用しません。

mysql> mysqld_safe --port=port_num --defaults-file=file_name

代わりに、次のコマンドを使用します。

mysql> mysqld_safe --defaults-file=file_name --port=port_num

MySQL のソースまたはバイナリ配布は通常、サーバーを若干異なる場所にインストールしますが、mysqld_safe スクリプトは、どちらからインストールしたサーバーでも正常に立ち上げることができるように作成されています。(セクション2.1.5「インストールのレイアウト」を参照してください。) mysqld_safe は、次の条件のいずれかが満たされていることを想定しています。

  • サーバーとデータベースは作業ディレクトリ (mysqld_safe が呼び出されたディレクトリ) から相対的に検索できること。バイナリ配布の場合、mysqld_safe は作業ディレクトリの下の bin ディレクトリおよび data ディレクトリを検索します。ソース配布の場合は、libexec ディレクトリおよび var ディレクトリを検索します。mysqld_safe を MySQL インストールディレクトリ (バイナリ配布の場合は /usr/local/mysql) から起動した場合には、この条件が満たされるはずです。

  • サーバーとデータベースが作業ディレクトリから相対的に検出できない場合は、mysqld_safe は絶対パス名での検索を試みます。通常の場所は /usr/local/libexec および /usr/local/var です。実際の場所は、配布のビルド時に構成される値から決定されます。構成時に指定された場所に MySQL がインストールされていれば、これは正しいはずです。

mysqld_safe はサーバーおよびデータベースを作業ディレクトリから相対的に検索しようとするため、mysqld_safe を MySQL インストールディレクトリから起動するかぎり、MySQL のバイナリ配布は任意の場所にインストールできます。

shell> cd mysql_installation_directory
shell> bin/mysqld_safe &

mysqld_safe を MySQL インストールディレクトリから呼び出しても失敗する場合は、--ledir オプションおよび --datadir オプションを指定して、システムのサーバーとデータベースがあるディレクトリを指定します。

MySQL 5.6.5 以降では、mysqld_safesleep および date システムユーティリティーを使用して、今回の起動までに何回起動しようとしたかを判断します。これらが存在し、5 回より多い場合は、再起動するまでに強制的に 1 秒間待機させられます。これは、連続して失敗する場合に過度に CPU を使用することを防ぐためのものです。(Bug #11761530、Bug #54035)

mysqld_safe を使用して mysqld を起動する場合、mysqld_safe は自身と mysqld からのエラー (および通知) メッセージが同じ出力先に送信されるよう手配します。

これらのメッセージの出力先を制御するための mysqld_safe オプションがいくつかあります。

  • --log-error=file_name: エラーメッセージを指定されたエラーファイルに書き込みます。

  • --syslog: logger プログラムをサポートするシステムで、syslog にエラーメッセージを書き込みます。

  • --skip-syslog: エラーメッセージを syslog に書き込みません。メッセージは、デフォルトのエラーログファイル (データディレクトリの host_name.err)、または --log-error オプションが指定された場合は、指定されたファイルに書き込まれます。

これらのオプションが指定されていない場合は、デフォルトは --skip-syslog です。

--log-error--syslog が両方指定された場合は、警告が発行され --log-error が優先されます。

mysqld_safe がメッセージを書き込む場合、通知はロギングの出力先 (syslog またはエラーログファイル) および stdout に送られます。エラーはロギングの出力先と stderr に送られます。


User Comments
  Posted by Robert Hodges on April 30, 2007
If you invoke mysql_safe from the default /etc/init.d/mysql script, beware of interference from SELinux. You may run into a problem where mysql_safe terminates immediately and causes the start operation to fail. If so, try turning off SELinux and see if it makes the problem go away.
Sign Up Login You must be logged in to post a comment.