前回までに1台の複数のmysqlを起動する方法を紹介しましたが、今回は、それらで双方向(マルチマスタ)レプリケーションを行う方法を紹介します。
my.cnf と my2.cnf
私のcolinux環境ではオプションファイルを切り替えることで、複数のmysqlを起動していますが、以降では次のように表記します。
オプションファイル | ここでの表記 |
---|---|
/etc/my.cnf | my.cnf |
/etc/my2.cnf | my2.cnf |
レプリケーション用ユーザの追加
mysqlではslaveからmasterを参照する際、レプリケーション用のユーザを使用するようです。そこで、my.cnf, my2.cnf のそれぞれに「GRANT REPLICATION SLAVE」を実行して下さい。
my.cnf> GRANT REPLICATION SLAVE ON *.* TO repl@localhost IDENTIFIED BY '内緒';
my2.cnf> GRANT REPLICATION SLAVE ON *.* TO repl@localhost IDENTIFIED BY '内緒';
mysqldを一旦停止
この後の作業で、オプションファイルの変更やコールドバックアップを取得する為、my.cnfとmy2.cnfのmysqldを一旦停止して下さい。
$ /usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my.cnf \ --user=root shutdown $ /usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my2.cnf \ --user=root shutdown
オプションファイルの変更
前回までのオプションファイル(my.cnf,my2.cnf)に対し、レプリケーションに関する記述を追記して下さい。
my2.cnf(port:3307)の抜粋
[mysqld] default-storage-engine = INNODB basedir = /usr/local/mysql datadir = /data/mysql2 port = 3307 socket = /tmp/mysql2.sock <略> server-id = 2 #ココ master-host = localhost #ココ master-user = repl #ココ master-password = 内緒 #ココ master-port = 3306 #ココ
my.cnf(port:3306)の抜粋
[mysqld] default-storage-engine = INNODB basedir = /usr/local/mysql datadir = /data/mysql port = 3306 socket = /tmp/mysql.sock <略> server-id = 1 #ココ master-host = localhost #ココ master-user = repl #ココ master-password = 内緒 #ココ master-port = 3307 #ココ
データのバックアップとコピー
私の場合、以前からある/data/mysql2を一旦、避け my.cnfのデータ(/data/mysql)をmy2.cnf(/data/mysql2)にコピーしました。
# mv /data/mysql2 /data/mysql2.bak # cp -r /data/mysql /data/mysql2 # chown -R mysql:mysql /data/mysql2
mysqldの起動
$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql & $ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my2.cnf --user=mysql &
レプリケーションの開始(slaveの起動)
まず、my.cnfとmy2.cnfのそれぞれで SHOW MASTER STATUS を実行し、log-binのファイル名を確認してください。
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000014 | 941 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
mysql2> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000022 | 1164 | | | +------------------+----------+--------------+------------------+
最後に「CHANGE MASTER TO」と「START SLAVE」を実行すれば、作業完了ですので、my.cnfとmy2.cnfのそれぞれに接続して動作確認を行って下さい。
mysql2> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='repl', MASTER_PASSWORD='内緒', MASTER_LOG_FILE='mysql-bin.000014'; mysql2> start slave;
mysql> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='repl', MASTER_PASSWORD='内緒', MASTER_LOG_FILE='mysql-bin.000012'; mysql> start slave;