CentOS 6以前とMySQL 5.6以前の構成ではmysqld_multiというものを使っていました。
これはMySQLをインストールすると入っているもので、複数のMySQLインスタンスを立ち上げたいときに使用します。
複数のインスタンスを立ち上げたいときとは、例えば本番環境で物理的に別れているDBサーバーを開発環境で再現したり、レプリケーションをテストをしたりするときに使います。
MySQLのオフィシャルサイトで紹介されていた方法があまりに簡単だったので、ここでも紹介します。
以下の方法は__MySQL 5.7.13以降でsystemctlを利用するシステムで有効__です。
MySQL 5.7で複数インスタンスの起動はできるか
もちろんできます。結局引数で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
を書き換えます。
今回はポート番号3306と3307のインスタンスを立ち上げますので、まずはそのためのディレクトリを作成しましょう。
[root@localhost ~]# mkdir /var/lib/mysqld/mysql_{3306,3307}; chown mysql: /var/lib/mysqld/mysql_{3306,3307}
次はmy.cnf
の設定です。以下を追記します。
[mysqld@mysql_3306]
port=3306
datadir=/var/lib/mysqld/mysql_3306
socket=/var/lib/mysqld/mysql_3306/mysql.sock
log-error=/var/log/mysqld_3306.log
[mysqld@mysql_3307]
port=3307
datadir=/var/lib/mysqld/mysql_3307
socket=/var/lib/mysqld/mysql_3307/mysql.sock
log-error=/var/log/mysqld_3307.log
ここまで来たら、起動するだけです。
以下のコマンドで起動と自動起動設定をします。
[root@localhost ~]# systemctl start mysqld@mysql_3306
[root@localhost ~]# systemctl enable mysqld@mysql_3306
初期パスワードは/var/lib/mysqld_3306.log
に記録されていますので、以下の手順と同様のセットアップをするだけです。
最後にもうひとつのmysqld_3307
も設定して完成。
まとめ
mysqld_multi
のときは起動スクリプトを書いたり、それがうまく動かなかったり面倒くさかったのですが、これだとsystemctl
に全部任せられるので楽です。