mysqld_multiの実装
mysqld_multiはPerlで書かれたスクリプトで、同一マシンで複数のMySQLインスタンスを
起動できる機能を持つ(MySQLをインストールしたら/usr/bin/配下にあるはず)。
そのmysqld_multiの実装においてやるべきことをまとめてみた。
ざっくり言うと、やるべきことは複数インスタンス用にOS上でのユーザ作成と
ディレクトリ作成、my.cnfの設定変更。
my.cnf 設定例(抜粋)
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = multi_admin ←停止時にmysqladminを実行するユーザ
password = password ←上記ユーザのパスワード
[mysqld1]
user = mysql1 ←mysqld1を起動するユーザ
server-id = 1
port = 3308
socket = ソケットファイルのフルパス
pid-file = PIDファイルのフルパス
datadir = /mysql/data/mysql2
log-error = エラーログファイルのフルパス
[mysqld2]
user = mysql2
server-id = 2
port = 3309
socket = ソケットファイルのフルパス
pid-file = PIDファイルのフルパス
datadir = /mysql/data/mysql2
log-error = エラーログファイルのフルパス
[mysqld]
共通の項目を記述
[mysqldn]セクションはそれぞれ重複しない値を指定すること。
また上記に加えてデフォルトストレージエンジンがInnoDBの場合は、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dirの指定も
それぞれのインスタンスごとにユニークな値を指定する。
つまり[mysqld]セクションではなく、[mysqldn]セクションに記述する。
バイナリログを有効にするのであれば、それもユニークなパスを指定する。
記述例はスクリプト本体にも書いてあるので参考に。
具体的な作業の流れは以下でいいとは思うが、、、抜けてるところもあると思うので、
自己責任でお願いしたい。
MySQLをインストールしただけで、新規DBなど作成していないという前提。
1.OS上で名インスタンス実行ユーザを作成。
2.想定するデータディレクトリやログファイルの場所など、必要なディレクトリを作成し、
オーナーやパーミッションを適宜設定しておく。
3.MySQLに接続し、すべてのインスタンスに共通するmulti_adminユーザを作成しておく。
multi_adminユーザにはシャットダウン権限を与える必要がある(他の権限は必要ない)。
他にも共通して利用したいユーザがいればこの時に作成しておくとよい。
mysql > GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY ‘password‘;
4.MySQLインスタンスを停止し、my.cnfを適宜編集する。
5.デフォルトのデータディレクトリ配下に生成されたDB(/var/lib/mysql/mysql)を、
my.cnfの設定に従ってそれぞれのインスタンスのデータディレクトリにコピーする。
元のデータディレクトリはバックアップ取得したら削除してよいが、すべて上手く
いってからの方がいいかな・・・
6.mysqld_multi startを実行。
起動できなかった場合は、my.cnfの記述、ディレクトリ構成、ユーザ周り(OS、DB共に)
を見直してみよう。ちなみにmysqld_multiを実行すると /usr/share/配下にmysqld_multi.log
というのが生成されるので、動作が上手く行かない時など確認してみるとよい。
途中まで成功していればmy.cnfで指定した場所に名インスタンスのエラーログが
生成されるので、それも確認してみる。
制御コマンド
# mysqld_multi start
# mysqld_multi stop
# mysqld_multi report ←”status”と同じ
インスタンスナンバーを指定して起動
# mysqld_multi start 1,4 ←1と4を起動
# mysqld_multi start 1-4 ←1から4までを起動
この他にmysqldの自動起動を無効にする、mysqld_multi自動起動スクリプトを
用意して自動起動を有効にする、などもやっておく必要がある。
参考URL
4.3.3. mysqld_multi — 複数のMySQL サーバ管理
http://blog.livedoor.jp/sasata299/archives/51185087.html
MySQL mysqld_multiを使用した自動起動Script
MySQLの複数起動
※mysqld_multiでググッた人は上記一通り目を通しているとは思うが。何せ情報が少ないので、、、