CentOS 7 + MySQL 5.7で複数のMySQLインスタンスを起動する方法がとても簡単な件

カテゴリ: コンピュータ / 公開日: 2016年10月02日(日曜)17:39 / 投稿者: Tom Goodsun

CentOS 6以前とMySQL 5.6以前の構成ではmysqld_multiというものを使っていました。
これはMySQLをインストールすると入っているもので、複数のMySQLインスタンスを立ち上げたいときに使用します。

複数のインスタンスを立ち上げたいときとは、例えば本番環境で物理的に別れているDBサーバーを開発環境で再現したり、レプリケーションをテストをしたりするときに使います。

未だに仕事ではCentOS 6とMySQL 5.6の構成で、世の中的にCentOS 7がどれぐらい普及しているのかわからないですが、MySQLのオフィシャルサイトで紹介されていた方法があまりに簡単だったので、ここでも紹介します。

以下の方法はMySQL 5.7.13以降でsystemctlを利用するシステムで有効です。

MySQL 5.7で複数インスタンスの起動はできるか

またMySQL 5.6でできたんで、出来ると思いますし、結局引数でdatadirとかpidファイルの場所とか指定すれば可能ではあります。
ちなみにMySQL 5.7.13のsystemctlプラットフォーム向けのパッケージではmysqld_multiはインストールされないそうです。
今からご紹介する方法以下のページに記載されている方法になります。

2.5.10 Managing MySQL Server with systemd

systemctl + MySQL 5.7で複数インスタンスの起動はとても簡単

普通にMySQLをインストールします。
私は以下の設定にしているので、/etc/my.cnfを書き換えます。
https://github.com/tomgoodsun/centos7_lamp_configs/blob/master/config/etc/my.cnf

そして、ここからです。
私の環境ではすでに既存のMySQLインスタンスが起動しているので、今回はポート番号3307と3308のインスタンスを立ち上げるようにします。
まずはそのためのディレクトリを作成しましょう。

[root@localhost ~]# mkdir /var/lib/mysql_{3307,3308}; chown mysql: /var/lib/mysql_{3307,3308}

次はmy.cnfの設定です。
先程の設定に以下を追記します。なお追記内容はご自身の環境や設定に合わせる必要があります。

[mysqld@mysql_3307]
port=3307
datadir=/var/lib/mysql_3307
socket=/var/lib/mysql_3307/mysql.sock
log-error=/var/log/mysqld_3307.log

[mysqld@mysql_3308]
port=3308
datadir=/var/lib/mysql_3308
socket=/var/lib/mysql_3308/mysql.sock
log-error=/var/log/mysqld_3308.log

ここまで来たら、起動するだけです。
以下のコマンドで起動と自動起動設定をします。

[root@localhost ~]# systemctl start mysqld@mysql_3307
[root@localhost ~]# systemctl enable mysqld@mysql_3307

初期パスワードは/var/lib/mysqld_3307/mysqld_3307.logに記録されていますので、以下の手順と同様のセットアップをするだけです。

https://github.com/tomgoodsun/centos7_lamp_configs#mysql-serverのセットアップ

最後にもうひとつのmysqld_3308も設定して完成。

mysqld_multiのときは起動ファイルを書いたり、それがうまく動かなかったり面倒くさかったのですが、これだとsystemctlに全部任せられるので楽です。