• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
XtraBackup搭建MySQL主从同步实践
发布日期:2016-4-23 23:4:38

  XtraBackup搭建MySQL主从同步实践


  图1

  一、前言

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

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

  二、更新历史

  2015年08月07日 - 初稿

  原文 - http://wsgzao.github.io/post/xtrabackup/

  其他文章:

  •   Percona XtraBackup - https://www.percona.com/software/mysql-database/percona-xtrabackup
  •   MySQL 5.6 Reference Manual :: 17 Replication - http://dev.mysql.com/doc/refman/5.6/en/replication.html
  •   基于Xtrabackup的物理备份解决方案预研 - http://tencentdba.com/blog/pre-research-on-physical-backup-using-xtrabakcup/
  •   xtrabackup 详解 - http://www.cnblogs.com/gomysql/p/3650645.html
  •   LTMP索引 - http://wsgzao.github.io/index/#LTMP

  三、原理

  1.MySQL主从同步原理

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

  2.XtraBackup备份原理

  innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本与开始备份以后的事务日志。完成了上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。

  备份分为以下两个过程:

  •   backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
  •   preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。

  3.XtraBackup的优点

  如一下所示的几个优点:

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

  三、配置

  1.准备工作

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

  参考代码如下所示:


  图2

  2.安装percona-xtrabackup

  一般推荐rpm安装 - https://www.percona.com/downloads/XtraBackup/LATEST/

  参考代码如下所示:


  图3

  3.备份和恢复

  通常一般都直接使用innobackupex,由于它能同时备份InnoDB与MyISAM引擎的表

  重点关注Slave_IO_Running和Slave_SQL_Runningd的状态是否为YES

  参考代码如下所示:


  图4

  四、 MySQL主从切换

  切换前断开主库访问连接观察进程状态,无写操作后再停止从库IO_THREAD进行切换

  参考代码如下所示:


  图5

  五、常见问题

  Slave_SQL_Running:No

如图6所示:


  图6