oracleの mysqld_multi — 複数のMySQL サーバ管理の方法はスタンダードな複数起動の方法なのですが、これを運用でやると、むちゃくちゃ使いづらい。あくまでも個人レベルの使いづらいなので、大半の方は使いやすいのかもしれないが、個人的にはテスト環境と本番環境を可能な限り近い設定にしたい場合のmy.cnfの設定が本番と乖離しすぎていてしんどい。。なので、もっと簡単な方法で複数起動する運用にしている。まあ、結果としてはやっていることは同じなんですけどね。^^;
以下の3つの設定を行えば、ポート毎の複数起動ができます
1. ポート毎のデータディレクトリを作成する
ポートの名前でデータディレクトリを作成します。
# mkdir -p /var/lib/mysql/{3306,3307,3308}
# chown -Rf mysql:mysql /var/lib/mysql/{3306,3307,3308}
# su - mysql
$ mysql_install_db --datadir=/var/lib/mysql/3306
$ mysql_install_db --datadir=/var/lib/mysql/3307
$ mysql_install_db --datadir=/var/lib/mysql/3308
2. my.cnf をポート毎に設定する
私はこんな感じでmy.cnf + ポート番号のファイルを作成しております
# ll /etc/my.cnf.*
-rwxr-xr-x 1 root root 43073 Jan 6 04:54 /etc/my.cnf.3306
-rwxr-xr-x 1 root root 43047 Nov 29 11:04 /etc/my.cnf.3307
-rwxr-xr-x 1 root root 43047 Nov 29 11:04 /etc/my.cnf.3308
上記ファイルでポートとソケットの部分はユニークな値にします。私は、3306,3307,3308にしました。
# generic configuration options
port = 3306
socket = /var/lib/mysql/3306/mysql.sock
3. ポート毎にMySQLを起動します
起動は、以下のように3306,3307,3308それぞれ起動します。
# mysqld_safe --defaults-file=/etc/my.cnf.3306 --datadir=/var/lib/mysql/3306 --socket=/var/lib/mysql/3306/mysql.sock --port=3306 &
# mysqld_safe --defaults-file=/etc/my.cnf.3307 --datadir=/var/lib/mysql/3307 --socket=/var/lib/mysql/3307/mysql.sock --port=3307 &
# mysqld_safe --defaults-file=/etc/my.cnf.3308 --datadir=/var/lib/mysql/3308 --socket=/var/lib/mysql/3308/mysql.sock --port=3308 &
以上で、3ポートでそれぞれプロセスが起動したかと思います。尚、当該ポート毎のインスタンスに接続する際は、
- DBサーバローカルから接続する場合
mysql -u root -p -S /var/lib/mysql/3306/mysql.sock
みたいな感じで
- リモートから接続する場合
mysql -u root -p -h xxx.xxx.xxx.xxx -P 3306
みたいな感じで行います。
尚、ポート毎に、インスタンスを停止する場合は、
mysqladmin -u root -p -S /var/lib/mysql/3306/mysql.sock shutdown
にして実行しますと、指定したポートのインスタンスが停止します。
なれると簡単なのでぜひお試しアレ。