LoginSignup
11
12

More than 5 years have passed since last update.

CentOS 7 + MySQL 5.7で複数のMySQLインスタンスを起動する

Posted at

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に全部任せられるので楽です。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12