mysqld_multi は、Unix ソケットファイルや TCP/IP ポートでの接続を待機する複数の mysqld プロセスを管理するためのものです。サーバーの起動または停止、現在のステータスのレポートを実行できます。
mysqld_multi は [mysqld
という名前のグループを N
]my.cnf
(または --defaults-file
オプションで指定されたファイル) から検索します。N
は任意の正の整数です。この数字は、次の説明ではオプショングループ番号、または GNR
といいます。グループ番号は、それぞれのオプショングループを識別し、起動、停止、またはステータスレポート取得の対象となるサーバーを指定するために、mysqld_multi の引数として使用されます。これらのグループにリストされるオプションは、mysqld を起動するために [mysqld]
グループで使用するものと同じです。(たとえばセクション2.10.1.2「MySQL を自動的に起動および停止する」などを参照してください。)ただし、複数のサーバーを使用する場合は、Unix ソケットファイルや TCP/IP ポート番号などに関してそれぞれが独自のオプション値を使用する必要があります。複数サーバーの環境で、どのオプションを一意とする必要があるのかについては、セクション5.3「1 つのマシン上での複数の MySQL インスタンスの実行」を参照してください。
mysqld_multi を呼び出すには、次の構文を使用します。
shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
、stop
、reload
(停止して再起動)、および report
は、実行する操作を示します (reload
は MySQL 5.6.3 で使用可能です。)オプション名に続く GNR
リストに従って、指定した操作を単一のサーバーまたは複数のサーバーで実行できます。リストがない場合は、mysqld_multi はオプションファイル内のすべてのサーバーに対して操作を実行します。
各 GNR
値は、オプショングループ番号またはグループ番号の範囲を表します。値は、オプションファイル内のグループ名の最後の数字とします。たとえば、[mysqld17]
という名前のグループの GNR
は 17
です。番号の範囲を指定するには、最初と最後の番号をダッシュで区切ります。GNR
値 10-13
は、[mysqld10]
から [mysqld13]
のグループを表します。コマンド行で、複数のグループまたはグループの範囲を、カンマで区切って指定できます。GNR
リストには空白文字 (スペースまたはタブ) を使用してはいけません。空白文字からあとにあるものはすべて無視されます。
次のコマンドは [mysqld17]
というオプショングループを使用して単一のサーバーを起動します。
shell> mysqld_multi start 17
次のコマンドは、[mysqld8]
および [mysqld10]
から [mysqld13]
までのオプショングループを使用して複数のサーバーを停止します。
shell> mysqld_multi stop 8,10-13
オプションファイルをセットアップする方法の例として、次のコマンドを使用します。
shell> mysqld_multi --example
mysqld_multi は次のようにオプションファイルを検索します。
読み取られるオプションファイルでは、[mysqld_multi]
および [mysqld
オプショングループが検索されます。N
][mysqld_multi]
グループは、mysqld_multi 自身へのオプションに使用できます。[mysqld
グループは、mysqld の特定のインスタンスに渡されるオプションに使用できます。
N
]
[mysqld]
グループまたは [mysqld_safe]
グループは、mysqld または mysqld_safe のすべてのインスタンスによって読み取られる共通オプションに使用できます。--defaults-file=
オプションを指定して、そのインスタンスに異なる構成ファイルを使用できます。この場合、そのファイルのfile_name
[mysqld]
または [mysqld_safe]
グループがそのインスタンスに使用されます。
mysqld_multi は次のオプションをサポートします。
-
ヘルプメッセージを表示して終了します。
-
サンプルのオプションファイルを表示します。
-
ログファイルの名前を指定します。ファイルが存在する場合は、ログ出力はそこに追加されます。
-
サーバーの停止に使用する mysqladmin バイナリ。
-
使用する mysqld バイナリ。このオプションの値として mysqld_safe を指定できます。mysqld_safe を使用してサーバーを起動する場合は、対応する
[mysqld
オプショングループにN
]mysqld
オプションまたはledir
オプションを含めることができます。これらのオプションは、mysqld_safe が起動するべきサーバーの名前と、サーバーがあるディレクトリのパス名を示します。(これらのオプションに関する説明は、セクション4.3.2「mysqld_safe — MySQL サーバー起動スクリプト」を参照してください。)例:[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
ログファイルではなく、
stdout
にログを出力します。デフォルトでは、出力はログファイルに送られます。 -
mysqladmin を呼び出すときに使う MySQL アカウントのパスワード。ほかの MySQL プログラムとは異なり、このオプションではパスワード値はオプションではありません。
-
サイレントモード。警告を無効にします。
-
Unix ソケットファイルではなく TCP/IP ポートを介して各 MySQL サーバーに接続します。(ソケットファイルがない場合でもサーバーは稼働している可能性がありますが、TCP/IP ポートからのみアクセスできます。)接続はデフォルトでは Unix ソケットファイルを使用して行われます。このオプションは
stop
操作とreport
操作に影響します。 -
mysqladmin を呼び出すときに使う MySQL アカウントのユーザー名。
-
より詳細になります。
-
バージョン情報を表示して終了します。
mysqld_multi に関する注意:
もっとも重要: mysqld_multi を使用する前に、mysqld サーバーに渡されるオプションの意味と、なぜ独立した mysqld プロセスが必要なのかを確実に理解してください。同じデータディレクトリで複数の mysqld サーバーを使用することの危険性に注意してください。特別な意図がないかぎり、独立のデータディレクトリを使用してください。スレッドを使用するシステムでは、同じデータディレクトリで複数のサーバーを起動してもパフォーマンスは改善されません。セクション5.3「1 つのマシン上での複数の MySQL インスタンスの実行」 を参照してください。
- 重要
各サーバーのデータディレクトリが、その特定の mysqld を開始した Unix アカウントから完全にアクセス可能であることを確認してください。特別な意図がないかぎり、Unix
root
アカウントをこれに使用しないでください。セクション6.1.5「MySQL を通常ユーザーとして実行する方法」を参照してください。 -
mysqld サーバーを (mysqladmin プログラムで) 停止するのに使用する MySQL アカウントが、各サーバーに対して同じユーザー名とパスワードを持つことを確認してください。また、そのアカウントには
SHUTDOWN
権限があることも確かめてください。管理対象のサーバーの管理アカウントのユーザー名またはパスワードが異なる場合は、各サーバーに同じユーザー名とパスワードを持つアカウントを作成するとよいでしょう。たとえば、次のコマンドをそれぞれのサーバーで実行することにより、共通のmulti_admin
アカウントをセットアップできます。shell> mysql -u root -S /tmp/mysql.sock -p Enter password: mysql> GRANT SHUTDOWN ON *.* -> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
セクション6.2「MySQL アクセス権限システム」を参照してください。これは、それぞれの mysqld サーバーで行う必要があります。それぞれに接続する場合、接続パラメータを適切に変更します。アカウント名のホスト名部分は、 mysqld_multi を実行するホストから
multi_admin
として接続できるものでなければなりません。 Unix ソケットファイルと TCP/IP ポート番号は、すべての mysqld で異なる必要があります。(または、ホストが複数のネットワークアドレスを持つ場合、
--bind-address
を使用して、異なるサーバーが異なるインタフェースを待機するようにできます。)-
mysqld_safe を使用して mysqld を起動している場合 (たとえば
--mysqld=mysqld_safe
)、--pid-file
オプションは非常に重要です。すべての mysqld が独自のプロセス ID ファイルを持っているべきです。mysqld ではなく、mysqld_safe を使用することの利点は、mysqld_safe は mysqld のプロセスをモニターして、kill -9
を使用したシグナル送信や、セグメンテーション違反などその他の原因でプロセスが終了した場合に、再起動するということです。mysqld_safe スクリプトでは、特定の場所から起動することが必要な場合があります。これは、mysqld_multi を実行する前に、特定のディレクトリに場所を変更しなければならない可能性があることを意味します。起動時に問題がある場合は、mysqld_safe スクリプトを調べてください。特に次の行をチェックします。---------------------------------------------------------------- MY_PWD=`pwd` # Check if we are starting this relative (for the binary release) if test -d $MY_PWD/data/mysql -a \ -f ./share/mysql/english/errmsg.sys -a \ -x ./bin/mysqld ----------------------------------------------------------------
これらの行によって実行されるテストは成功するはずです。そうでないと問題が生じます。セクション4.3.2「mysqld_safe — MySQL サーバー起動スクリプト」を参照してください。
--user
オプションを mysqld に対して使用する場合がありますが、そのためには mysqld_multi スクリプトを Unix のスーパーユーザー (root
) として実行する必要があります。このオプションがオプションファイルにあるかどうかは問題ではなく、もしスーパーユーザーではない人が、mysqld プロセスを自分の Unix アカウントで起動すると、警告が出ます。
次の例は、mysqld_multi とともに使用するオプションファイルの設定方法を示します。mysqld プログラムが起動または終了する順序は、オプションファイルで指定する順序によります。グループ番号は、切れ目のないシーケンスの形式にする必要はありません。例では、最初と 5 番目の [mysqld
グループは意図的に省略しています。これは、オプションファイルで「ギャップ」があっても構わないことを示しています。これにより、柔軟性が高まります。
N
]
# This file should probably be in your home dir (~/.my.cnf)
# or /etc/my.cnf
# Version 2.1 by Jani Tolonen
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani
セクション4.2.6「オプションファイルの使用」を参照してください。