CentOS7使用XtraBackup实现MySQL5.6 & 5.7的主从复制

1.前言

Percona XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说确实让人眼前一亮,与MySQL Enterprise Backup(InnoDB Hot Backup)的功能对比可以参考扩展阅读。当然我们在实际运维过程中都应针对不同的业务需求分析和选择合适的备份恢复方案,这篇文章就是针对MySQL多实例且一个实例对应多个database的情况,实现MySQL在线不停机不锁表的主从同步,日后再继续更新分享基于XtraBackup的其它实用技能。

XtraBackup是目前首选的备份方案之一

2.原理

2.1 MySQL主从同步原理

MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

2.2 XtraBackup备份原理

innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。
备份分为两个过程:
\1. backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
\2. preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。

2.3 XtraBackup的优点

  1. 可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
  2. 数据备份过程中不会中断事务的处理(热备份)
  3. 节约磁盘空间和网络带宽
  4. 自动完成备份鉴定
  5. 因更快的恢复时间而提高在线时间

3.配置

3.1 准备工作

MySQL步骤和my.cnf配置参考LTMP - http://wsgzao.github.io/post/ltmp/

3.2 安装percona-xtrabackup

省略,详见另一篇文章**【Xtrabackup MySQL备份与恢复】**

3.3 备份和恢复

省略,详见另一篇文章**【Xtrabackup MySQL备份与恢复】**

3.4 MySQL主从配置

3.4.1 主库注意事项

  1. 主库需要开启binlog,即:log-bin=ON
  2. 主库需要设置server-id,即:server-id=100
  3. 主库binlog_format需要设置为row(基于行的复制),即:binlog_format=ROW

3.4.2 MySQL配置文件

  • 编辑/etc/my.cnf
# 以下内容为关键部分,其它请按需调整!!!
#主从数据库同步注意点
[mysqld]
#主从之间的id不能相同
server-id = 102
#启用二进制日志
log-bin=ON
# 基于行的复制
binlog_format=ROW
#一般在从库开启(可选)
read_only=1
#推荐使用InnoDB并做好相关配置

3.4.3 配置从库

根据本文章节3.3恢复数据库实例,并成功启动MySQL服务为前提!!!

登录到slave数据库:

mysql> stop slave;
mysql> change master to master_host='172.16.10.1', master_port=3306, master_user='repl', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=120;
mysql> start slave;
mysql> show slave status\G;

如果出现两个yes代表成功了,Seconds_Behind_Master为主从延迟时间,刚开启主从配置一般都会有一定延迟,等待该数值为0即可。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

3.5 常见问题

3.5.1 Slave_SQL_Running:No

#一般是事务回滚造成的
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

CentOS7使用XtraBackup实现MySQL5.6 & 5.7的主从复制
https://www.gmtgo.com/199.html
作者
大帅
发布于
2022年10月19日
许可协议