mysqld_multiで複数のインスタンスを起動する【MariaDB】

2022-07-19

mysqld_multiで複数のMySQLサーバーを起動する

MariaDBで複数のMySQLのインスタンスを起動するには「mysqld_multi」を利用するとできます。
検証したサーバーは、少し古くCentOS 7系で、MariaDBのバージョンは「mariadb 5.5」と少し古いバージョンです。

今のCentOS 8系の「mariadb 10.3」でも、同じ設定でできるかと思います

1.既存の設定及びDBをバックアップする

複数のMySQLサーバーを起動する前に既存の設定をバックアップしておきます

# DBをバックアップ
$ sudo mysqldump -u root -p --all-databases --lock-all-tables > /var/tmp/dbdump.db

# my.cnf のバックアップ
$ sudo cp /etc/my.cnf /etc/my.cnf.bak

2.新しいMySQLのディレクトリを作成する

新しいMySQL用のDB等を保存するディレクトリを作成します

# 新しいMySQL用のデータディレクトリ作成
$ sudo mkdir /var/lib/mysql2

# データディレクトリを初期化
$ sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql2

# 所有者を「mysql」に変更
$ sudo chown -R mysql:mysql /var/lib/mysql2

mysqld_multi 用に my.cnf を変更

「/etc/my.cnf」を「mysqld_multi」のセクションの追加と「mysqld」の設定を「mysqld1」に変更して、複数起動する「mysqld2」、「mysqld3」とか設定していきます

$ sudo vim /etc/my.cnf
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = multi_admin
password   = multipass

[mysqld]

[mysqld1]
port       = 3306
datadir    = /var/lib/mysql
socket     = /var/lib/mysql/mysql.sock
pid-file   = /var/run/mariadb/mariadb.pid
log-error  = /var/log/mariadb/mariadb1.log

# slave
[mysqld2]
port       = 3307
datadir    = /var/lib/mysql2
socket     = /var/lib/mysql2/mysql2.sock
pid-file   = /var/run/mariadb/mariadb2.pid
log-error  = /var/log/mariadb/mariadb2.log

mysqld_multiを起動する

通常のMariaDBを停止してから、mysqd_multiを起動します。

$ sudo systemctl stop mariadb.service 
$ sudo mysqld_multi start
$ sudo mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running

mysqld_multi stopを実行するユーザーの追加

mysqld_multi stopを実行するユーザーを作成します。SHUTDOWN権限をmulti_adminに付与します

$ mysql -u root -p
MariaDB [(none)]> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;

$ mysql -h 127.0.0.1 -P 3307 -u root -p
MariaDB [(none)]> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;

multi_adminで、mysqld_multi stopできるか確認します

$ sudo mysqld_multi stop
$ sudo mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running


$ sudo mysqld_multi start
$ sudo mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running

複数のMySQLサーバーにログインする方法

通常の3306ポートで起動しているMySQLには、通常取りにクライアントから接続できますが、通常と違うポートに接続するにはポートをしてする必要があります。ポートを指定するには「-P ポート番号」とします

# ポートが3307の場合は「-P 3307」とします
$ mysql -h 127.0.0.1 -P 3307 -u root -p