複数のサーバを Unix 上で実行する最も簡単な方法は、異なる TCP/IP ポートとソケットファイルを使用するようにしてサーバをコンパイルし、それぞれが別のネットワークインタフェースで接続するようにすることです。また、各インストールを別々のベースディレクトリでコンパイルすることにより、データディレクトリ、ログファイル、および PID ファイルの場所をサーバ別にすることができます。
既存サーバがデフォルトのポート番号とソケットファイルでコンフィギャされているとします。新しいサーバを別のパラメータでコンフィギャするには、以下のように
configure
コマンドを使用します。
shell>./configure --with-tcp-port=port_number \
--with-unix-socket-path=file_name \
--prefix=/usr/local/mysql-4.0.17
ここで、port_number
と
file_name
に、デフォルト以外のポート番号とソケットファイルのパス名を指定します。および、--prefix
の値も、既存の MySQL
インストールの場所とは別のインストールディレクトリを指定します。
MySQL サーバが特定のポート番号をリッスンしている場合、以下のコマンドを使用して、ベースディレクトリやソケット名など、重要な変数の値を確認できます。
shell> mysqladmin --host=host_name --port=port_number variables
このコマンドで表示される情報により、追加サーバを設定するときにどのオプション値を使用してはいけないかがわかります。
注意: ``localhost
''
をホスト名として指定すると、mysqladmin
は TCP/IP ではなく、Unix
ソケット接続をデフォルト使用します。 MySQL 4.1
では、--protocol={TCP | SOCKET | PIPE |
MEMORY}
オプションを使用して、使用する接続プロトコルを明示的に指定できます。
別のソケットファイルおよび TCP/IP ポート番号で起動するために、新たに MySQL サーバをコンパイルする必要はありません。実行時に値を指定することも可能です。これを行う 1 つの方法として、コマンドラインオプションの使用があります。
shell> /path/to/mysqld_safe --socket=file_name --port=port_number
2
番目のサーバに別のデータベースディレクトリを使用するため、--datadir=path
オプションを mysqld_safe
に渡します。
同様の効果を得る別の方法として、環境変数を使用してソケット名とポート番号を設定することもできます。
shell>MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell>MYSQL_TCP_PORT=3307
shell>export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell>scripts/mysql_install_db
shell>bin/mysqld_safe &
この方法を使用すると、テスト用に 2 つ目のサーバをすばやく起動できます。この方法の長所は、上記のシェルから呼び出したどのクライアントプログラムにもこの環境変数が適用される点です。そのため、これらのクライアントの接続は自動的に 2 つ目のサーバにダイレクトされます。
付録 F. 環境変数
に、mysqld
を制御する他の環境変数の一覧が記載されています。
自動サーバ実行では、ブート時に実行されるスタートアップスクリプトにより、サーバごとに以下のコマンドが 1 回ずつ実行される必要があります。その際、各コマンドに対して適切なオプション設定ファイルのパスを設定します。
mysqld_safe --defaults-file=path-to-option-file
各オプション設定ファイルには、特定のサーバに固有のオプション値が含まれていることが必要です。
Unix では、mysqld_multi
スクリプトを使用して複数のサーバを開始することもできます。
See 項4.8.3. 「mysqld_multi
(複数の MySQL
サーバを管理するプログラム)」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.