るいすときのこの物語

オタクエンジニアの雑記

MySQL でスレーブ複製編 via ディレクトリごとコピー


mysql
mysql
前回は XtraBackup を使って、スレーブを止めずにスレーブを複製する方法を書きましたが
今回はスレーブを止めて、スレーブを複製する方法を覚書で書いておきます。
blog.luispc.com

(複製元)複製先へ datadir をコピー

# systemctl stop mysql
# scp -r /var/lib/mysql luis@hoge:

(複製先)ファイルの配置

# cp -rf mysql /var/lib
# chown -R mysql: /var/lib/mysql

レプリケーションについて

レプリケーションは、MySQL プロセスを再起動すると master.info もしくは mysql.slave_master_info の情報を見て、勝手にレプリケーションが開始されてしまいます。
これを防ぎたい場合は、my.cnf に

skip-slave-start

を追記するのが良いと思います。

MySQL 5.5 までなら、master.info を消すだけで大丈夫ですが、mysql.slave_master_info をファイルごと消すとエラー文が吐き出されますが操作はできます。

2018-09-12 16:36:43 31648 [Warning] Info table is not ready to be used. Table 'mysql.slave_master_info' cannot be opened.
2018-09-12 16:36:43 31648 [ERROR] Error in checking mysql.slave_master_info repository info type of TABLE.
2018-09-12 16:36:43 31648 [ERROR] Error creating master info: Error checking repositories.
2018-09-12 16:36:43 31648 [ERROR] Failed to create or recover replication info repository.

MySQL 5.5 まで(複製先)

MySQL 5.5 まではマスターの情報が master.info に吐き出されるので、
ファイルの配置して、mysqld を起動するだけで勝手にレプリケーションを貼りに行ってくれます。

MySQL 5.6から(複製先)

MySQL 5.6 からは --master-info-repository=TABLE が my.cnf に無い限り、MySQL 5.5 と同様に master.info というファイルがあります。

    • master-info-repository=TABLE の場合、マスター情報は mysql.slave_master_info にあります。

こちらも MySQL 5.5 同様に、MySQL プロセスを起動するだけで勝手にレプリケーションを貼りに行きます。

master.info -> mysql.slave_master_info への切り替えは

master-info-repository=TABLE

を追記するだけで、切り替わってくれます。
逆も然り。