Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
45
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@hit

mysql_multi「を・・使わない」で同一サーバ内に複数インスタンスを立ち上げる方法

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

にして実行しますと、指定したポートのインスタンスが停止します。

なれると簡単なのでぜひお試しアレ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
45
Help us understand the problem. What are the problem?