前回は XtraBackup を使って、スレーブを止めずにスレーブを複製する方法を書きましたが
今回はスレーブを止めて、スレーブを複製する方法を覚書で書いておきます。
rarirure.rip
SCP
(複製元)複製先へ datadir をコピー
# systemctl stop mysql # scp -r /var/lib/mysql luis@hoge:
(複製先)ファイルの配置
# cp -rf mysql /var/lib # chown -R mysql: /var/lib/mysql
nc
pigz, pbzip2 で送れば高速に送れる。
受信側
$ nc -l 9999 | tar xvf - --use-compress-prog=pigz
送信側
$ tar cf - --use-compress-prog=pigz mysql | nc hoge.luis.local 9999
pigz は速い、並列で処理できる。
pbzip2 は並列で処理できるし、pigz に比べて圧縮後の容量が半分になるが pigz より解凍(圧縮)が倍遅い。
レプリケーションについて
レプリケーションは、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
を追記するだけで、切り替わってくれます。
逆も然り。