mysqld_multi は、Unix ソケットファイルや TCP/IP ポートでの接続を待機する複数の mysqld プロセスを管理するためのものです。 サーバーの起動または停止、現在のステータスのレポートを実行できます。
一部の Linux プラットフォームでは、RPM または Debian パッケージからの MySQL インストールに、MySQL サーバーの起動と停止を管理するための systemd サポートが含まれています。 これらのプラットフォームでは、mysqld_multi は不要であるためインストールされません。 systemd を使用した複数の MySQL インスタンスの処理の詳細は、セクション2.5.9「systemd を使用した MySQL Server の管理」 を参照してください。
mysqld_multi は [mysqld
という名前のグループを N
]my.cnf
(または --defaults-file
オプションで指定されたファイル) から検索します。 N
は任意の正の整数です。 この数字は、次の説明ではオプショングループ番号、または GNR
といいます。 グループ番号は、それぞれのオプショングループを識別し、起動、停止、またはステータスレポート取得の対象となるサーバーを指定するために、mysqld_multi の引数として使用されます。 これらのグループにリストされるオプションは、mysqld を起動するために [mysqld]
グループで使用するものと同じです。 (たとえばセクション2.10.5「MySQL を自動的に起動および停止する」などを参照してください。) ただし、複数のサーバーを使用する場合は、Unix ソケットファイルや TCP/IP ポート番号などに関してそれぞれが独自のオプション値を使用する必要があります。 複数サーバーの環境で、どのオプションを一意とする必要があるのかについては、セクション5.8「1 つのマシン上での複数の MySQL インスタンスの実行」を参照してください。
mysqld_multi を呼び出すには、次の構文を使用します。
shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
, stop
, reload
(停止して再起動) および report
は、実行する操作を示します。 オプション名に続く 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 は次のようにオプションファイルを検索します。
これらのオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。
読み取られるオプションファイルでは、[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.8「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> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
セクション6.2「アクセス制御とアカウント管理」を参照してください。 これは、それぞれの 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
を使用したシグナル送信や、セグメンテーション違反などその他の原因でプロセスが終了した場合に、再起動するということです。--user
オプションを mysqld に対して使用する場合がありますが、そのためには mysqld_multi スクリプトを Unix のスーパーユーザー (root
) として実行する必要があります。 このオプションがオプションファイルにあるかどうかは問題ではなく、もしスーパーユーザーではない人が、mysqld プロセスを自分の Unix アカウントで起動すると、警告が出ます。
次の例は、mysqld_multi とともに使用するオプションファイルの設定方法を示します。 mysqld プログラムが起動または終了する順序は、オプションファイルで指定する順序によります。 グループ番号は、切れ目のないシーケンスの形式にする必要はありません。 例では、最初と 5 番目の [mysqld
グループは意図的に省略しています。これは、オプションファイルで「ギャップ」があっても構わないことを示しています。 これにより、柔軟性が高まります。
N
]
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4
セクション4.2.2.2「オプションファイルの使用」を参照してください。