之前一直有一个疑问,就是从master
中备份数据后,在还原到slave
主机的这段时间,如果master
一直在写,当使用master_auto_position=1
时,slave
是不是会自动同步过来。答案是肯定的,在使用GTID
模式下时,数据会自动同步过来。
– 纸上得来终觉浅,绝知此事要躬行
准备工作
my.cnf
增加以下内容
server-id
主与从不一样,其他一样即可
1
2
3
4
5
6
7
8
|
[mysqld]
# master为0,slave为1
server-id = 0
gtid-mode = ON
enforce_gtid_consistency = 1
log-slave-updates = 1
log-bin = mysql-bin
log-bin-index = mysql-bin.index
|
创建复制的帐号
1
2
|
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';
FLUSH PRIVILEGES;
|
在master
主机上备份
1
2
3
4
5
6
7
8
9
10
|
docker run --rm -v /data/mysql_data:/var/lib/mysql \
-v /data/backup:/backup \
tuwei1314/xtrabackup:1.0 \
xtrabackup \
--host=IP \
--user=root \
--password=password \
--slave-info \
--target-dir=/backup \
--backup
|
复制文件至Slave
1
|
scp -r backup root@SlaveMySQLServer:/data/backup
|
在Slave
主机上应用
1
2
3
4
5
6
|
docker run --rm -v /data/mysql-data:/var/lib/mysql \
-v /data/backup:/backup \
tuwei1314/xtrabackup:1.0 \
xtrabackup \
--prepare \
--target-dir=/backup \
|
在Slave
主机上还原
1
2
3
4
5
6
7
|
docker run --rm -v /data/mysql-data:/var/lib/mysql \
-v /data/backup:/backup \
tuwei1314/xtrabackup:1.0 \
xtrabackup \
--move-back \
--target-dir=/backup \
# 将宿主机的/data/mysql-data作为复制的目的目录,源为/data/backup。通过xtrabackup移动回去
|
执行以上步骤后,/data/mysql-data
下的文件就可以直接被MySQL
使用了。直接将my.cnf
中的数据目录指向该目录即可,并启动服务。
Slave
指定Master
1
2
3
|
CHANGE MASTER TO master_host="master-ip",master_port=port,master_user='repl',
master_password='password',master_auto_position=1;
START SLAVE;
|
查看状态