MySQL 系列连载之 XtraBackup 备份原理(1)

为促进社区发展,运维派寻求战略合作、赞助、投资,请联系微信:helloywp

导读

在日常的linux运维工作中,大数据量备份与还原,始终是个难点。关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天本文推荐另一个备份工具innobackupex。

如果您在本文遇到任何问题或疑问请到QQ群中与我们交流。也可在下方进行评论。我将在第一时间和您进行交流,共同学习。
QQ群:201777608、526871767、1689067(加群时注明:运维派)

Xtrabackup简介

https://www.percona.com/sites/all/themes/percona2015/images/product-logos/xtrabackup-big.png
innobackupex和mysqldump都可以对mysql进行热备份的,mysqldump对mysql的innodb的备份可以使用single-transaction参数来开启一个事务,利用innodb的mvcc来不进行锁表进行热备份,mysqldump备份是逻辑备份,备份出来的文件是sql语句,所以备份和恢复的时候很慢,但是备份和恢复时候很清楚。当MYSQL数据超过10G时,用mysqldump来导出备份就比较慢了,此种情况下用innobackupex这个工具就比mysqldump要快很多。利用它对mysql做全量和增量备份.

    Percona XtraBackup可以说是一个相对完美的免费开源数据备份工具,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写)

此工具调用xtrabackup和tar4ibd工具,实现很多对性能要求并不高的任务和备份逻辑,可以说它是innodb热备工具ibbackup的一个开源替代品。

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

原理

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、XtraBackup备份原理

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

3、备份的两个过程

backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。

preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。

4、XtraBackup的优点

1、可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)

2、数据备份过程中不会中断事务的处理(热备份)

3、节约磁盘空间和网络带宽

4、自动完成备份鉴定

5、因更快的恢复时间而提高在线时间

5、Xtrabackup的两个工具

1)xtrabackup :只能用于热备份innodb,xtradb两种数据引擎表的工具,不能备份其他表。

2)innobackupex:是一个对xtrabackup封装的perl脚本,提供了用于myisam(会锁表)和innodb引擎,及混合使用引擎备份的能力。主要是为了方便同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。 innobackupex比xtarbackup有更强的功能,它整合了xtrabackup和其他的一些功能,它不但可以全量备份/恢复,还可以基于时间的增量备份与恢复。innobackupex同时支持innodb,myisam。

6、Xtrabackup可以做什么

1)在线(热)备份整个库的InnoDB, XtraDB表

2)在xtrabackup的上一次整库备份基础上做增量备份(innodb only)

3)以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。

7、Xtrabackup工具工作原理

支持对InnoDB存储引擎的增量备份

1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。

2)在进行增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。

8、innobackupex备份mysql数据的流程

innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup完成后,innobackupex就查看文件xtrabackup_suspended ;然后执行“FLUSH TABLES WITH READ LOCK”来备份其他的文件。

9、innobackupex恢复mysql数据的流程

innobackupex首先读取my.cnf,查看变量(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)对应的目录是存在,确定相关目录存在后,然后先copy myisam表和索引,然后在copy innodb的表、索引和日志。

10、innobackupex备份和恢复的工作原理

(1)备份的工作原理

1、备份开始时首先会开启一个后台检测进程,实时检测mysql redo的变化,一旦发现redo中有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中。

2、之后复制innodb的数据文件和系统表空间文件ibdata1,待复制结束后。

3、执行flush tables with read lock操作。

4、复制.frm,MYI,MYD,等文件(执行flush tableswith read lock的目的是为了防止数据表发生DDL操作,并且在这一时刻获得binlog的位置)。

5、最后会发出unlock tables,把表设置为可读可写状态。

6、最终停止xtrabackup_log。

(2)恢复的工作原理

1、为了恢复一个备份,innobackupex需要以–copy-back选项启动。

2、innobackupex将会首先通过my.cnf文件读取如下变量:datadir,innodb_data_home_dir,innodb_data_file_path, innodb_log_group_home_dir,并确定这些目录存在。

3、接下来,此脚本将会首先拷贝MyISAM表、索引文件、其他类型的文件(如:.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt files)

4、接下来拷贝InnoDB表数据文件,最后拷贝日志文件。

5、拷贝执行时将会保留文件属性,在使用备份文件启动MySQL前,可能需要更改文件的owener(如从拷贝文件的user更改到mysql用户)。

后记

第一篇 MySQL 系列连载之 XtraBackup 备份原理(1)

第二篇 MySQL 系列连载之 XtraBackup全量热备 or 恢复实践(2)

第三篇 MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3)

感谢您阅读。

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2012-2019 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部