Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  mysqld_multi — 複数の MySQL サーバーの管理

4.3.4 mysqld_multi — 複数の MySQL サーバーの管理

mysqld_multi は、Unix ソケットファイルや TCP/IP ポートでの接続を待機する複数の mysqld プロセスを管理するためのものです。サーバーの起動または停止、現在のステータスのレポートを実行できます。

mysqld_multi[mysqldN] という名前のグループを 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] ...]

startstopreload (停止して再起動)、および report は、実行する操作を示します (reload は MySQL 5.6.3 で使用可能です。)オプション名に続く GNR リストに従って、指定した操作を単一のサーバーまたは複数のサーバーで実行できます。リストがない場合は、mysqld_multi はオプションファイル内のすべてのサーバーに対して操作を実行します。

GNR 値は、オプショングループ番号またはグループ番号の範囲を表します。値は、オプションファイル内のグループ名の最後の数字とします。たとえば、[mysqld17] という名前のグループの GNR17 です。番号の範囲を指定するには、最初と最後の番号をダッシュで区切ります。GNR10-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 は次のようにオプションファイルを検索します。

  • --no-defaults では、オプションファイルは読み取りません。

  • --defaults-file=file_name では、指定されたファイルのみを読み取ります。

  • それ以外の場合は、--defaults-extra-file=file_name オプションが指定された場合はそこで指定されたファイルを含めて、標準の場所のリストにあるオプションファイルが読み取られます。(オプションが複数回指定された場合は、最後の値が使用されます。)

読み取られるオプションファイルでは、[mysqld_multi] および [mysqldN] オプショングループが検索されます。[mysqld_multi] グループは、mysqld_multi 自身へのオプションに使用できます。[mysqldN] グループは、mysqld の特定のインスタンスに渡されるオプションに使用できます。

[mysqld] グループまたは [mysqld_safe] グループは、mysqld または mysqld_safe のすべてのインスタンスによって読み取られる共通オプションに使用できます。--defaults-file=file_name オプションを指定して、そのインスタンスに異なる構成ファイルを使用できます。この場合、そのファイルの[mysqld] または [mysqld_safe] グループがそのインスタンスに使用されます。

mysqld_multi は次のオプションをサポートします。

  • --help

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

  • --example

    サンプルのオプションファイルを表示します。

  • --log=file_name

    ログファイルの名前を指定します。ファイルが存在する場合は、ログ出力はそこに追加されます。

  • --mysqladmin=prog_name

    サーバーの停止に使用する mysqladmin バイナリ。

  • --mysqld=prog_name

    使用する mysqld バイナリ。このオプションの値として mysqld_safe を指定できます。mysqld_safe を使用してサーバーを起動する場合は、対応する [mysqldN] オプショングループに mysqld オプションまたは ledir オプションを含めることができます。これらのオプションは、mysqld_safe が起動するべきサーバーの名前と、サーバーがあるディレクトリのパス名を示します。(これらのオプションに関する説明は、セクション4.3.2「mysqld_safe — MySQL サーバー起動スクリプト」を参照してください。)例:

    [mysqld38]
    mysqld = mysqld-debug
    ledir  = /opt/local/mysql/libexec
    
  • --no-log

    ログファイルではなく、stdout にログを出力します。デフォルトでは、出力はログファイルに送られます。

  • --password=password

    mysqladmin を呼び出すときに使う MySQL アカウントのパスワード。ほかの MySQL プログラムとは異なり、このオプションではパスワード値はオプションではありません。

  • --silent

    サイレントモード。警告を無効にします。

  • --tcp-ip

    Unix ソケットファイルではなく TCP/IP ポートを介して各 MySQL サーバーに接続します。(ソケットファイルがない場合でもサーバーは稼働している可能性がありますが、TCP/IP ポートからのみアクセスできます。)接続はデフォルトでは Unix ソケットファイルを使用して行われます。このオプションは stop 操作と report 操作に影響します。

  • --user=user_name

    mysqladmin を呼び出すときに使う MySQL アカウントのユーザー名。

  • --verbose

    より詳細になります。

  • --version

    バージョン情報を表示して終了します。

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_safemysqld のプロセスをモニターして、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 番目の [mysqldN] グループは意図的に省略しています。これは、オプションファイルでギャップがあっても構わないことを示しています。これにより、柔軟性が高まります。

# 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「オプションファイルの使用」を参照してください。


User Comments
  Posted by Tim Young on March 8, 2011
The mysqld_multi script does not have everything that an rc.d file would expect (status/restart are missing, no chkconfig information). And it does more than just a standard script does (you can tell it which servers to act on, etc). I wrote this wrapper for my /etc/init.d/mysqld_multi file:

#!/bin/sh
# mysqld This shell script takes care of starting and stopping
# the MySQL subsystem (mysqld) using mysql_multi.
#
# chkconfig: - 64 36
# description: MySQL database server.
# processname: mysqld
# config: /etc/my.cnf

#put your MySql root pass here with the --password=
#example: pass="--password=ChangeThisPassword"
pass=""

mysqld_start() {
echo "Starting mysqld..."
mysqld_multi start $* $pass
}

mysqld_stop() {
echo "Stopping mysqld..."
mysqld_multi stop $* $pass
}

mysqld_restart() {
mysqld_stop $*
sleep 1
mysqld_status $*
sleep 1
mysqld_start $*
sleep 1
mysqld_status $*
}
mysqld_which() {
b=`grep "\[mysqld[0-9][0-9]*\]" /etc/my.cnf | sed 's/[^A-Za-z0-9]//g' | wc -l`
echo "The following $b instances are configured:"
grep "\[mysqld[0-9][0-9]*\]" /etc/my.cnf | sed 's/[^A-Za-z0-9]//g'
}

mysqld_status() {
mysqld_multi report $*
}

#Set these variables so mysqld finds the right information
export PATH=/usr/bin:/usr/sbin:$PATH
option=$1
shift

case "$option" in
'start') mysqld_start $*;;
'stop') mysqld_stop $*;;
'restart') mysqld_restart $*;;
'which') mysqld_which $*;;
'status')
mysqld_status $* ;;
*)
echo "Usage: $0 [start|stop|restart|status|which]"
echo "Optional info: "
echo " This uses mysql_multi, which allows control of individual mysqld "
echo " instances. Do this by specifying a list of numbers following the"
echo " command (start/stop/etc.). For example:"
echo " $0 stop 1,3"
echo " $0 stop 1-3"
echo " $0 stop 1"
echo " $0 stop 1-3,5"
echo
echo " do $0 which to list the mysql instances that are configured"
esac

Sign Up Login You must be logged in to post a comment.