xtrabackup备份mysql,是逻辑物理备份,主要备份表空间。
1.当mysql是新的,只执行过set password命令
2.当mysql已经执行过gtid事务
当mysql是新的时候,很多时候我们需要在多台服务器安装mysql,当安装好一台后,可使用xtrabackup备份,然后把备份推送到另外一台服务器。然后另外一台服务器启动mysql,开启slave
此时mysql里是没有执行过任何gtid事务,所以此时在slave服务器直接start slave就可以成功了。
(xtrabackup备份的时候,不会备份bin-log日志。在mysql5.7下,mysql主在初始化完成的时候,会给一个密码你,此时先用 set password='123456'; 修改好密码后,再用xtrabackup备份,)
主:
set password='123456';
然后使用xtrabackup备份数据
innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxx /data/backup/
然后把备份好的数据scp -r推送给slave
推送好之后,创建一个主从同步账号
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'rep'@'192.168.209.132' identified by '123456';
从:
使用主推送的备份启动mysql,然后show master status\G 可以看到gtid没有执行过一个事务
change master to master_host='192.168.209.131',master_port=3306,master_user='user',master_password='123456',master_auto_position=1;
start slave;
show slave status\G
当mysql已经执行过gtid事务,此时通过xtrabackup推送给从服务器。
1.先启动mysql,然后show master status\G,会发现通过xtrabackup备份过来的,虽然里面有主执行过的数据,但是没记录到任何一个gtid事务,Executed_Gtid_Set是为空的(所以我们需要把这些从已经执行过的gtid事务都设置为过期,否则会从主再次同步过来,就会冲突了)
2.查看xtrabackup执行到那个gtid事务了,在xtrabackup备份的文件了,有一个xtrabackup_binlog_info文件,查看这个文件的内容
,从图片内容可知,执行到了4a7cfacc-f1af-11e9-a8c4-0050563a3356:1-3这些事务,那么从mysql,把这些事务设置为过期就可以了。
3.设置gtid过期,步骤如下
set global gtid_purged='4a7cfacc-f1af-11e9-a8c4-0050563a3356:1-3'; #执行这个的时候,需要确定@@GLOBAL.GTID_EXECUTED is empty空的才行,如果不是空,可通过 reset master 设置为空
show global variables like '%gtid%'; #查看是否设置gtid_purged成功
start slave; #开启主从同步
show slave status\G #查看主从同步是否成功
网友评论