Percona XtraBackup原理详解

一 简介

Percona XtraBackup是一个开源的MySQL数据库热备工具,允许你在备份的时候不锁表。支持备份的存储引擎有InnoDB, XtraDB, MyISAM ;支持的MySQL版本 5.1 5.5, 5.6 , 5.7;无论是7X24的高负载数据库环境,还是低TPS的数据库环境,Percona XtraBackup都能完成备份而不影响生产环境

Percona XtraBackup是世界上唯一开源免费的MySQL热备工具,可以对InnoDB 和 XtraDB存储引擎的表进行非堵塞备份。

二 备份特点

1 快速可靠完成备份

2 备份期间不会打断正在进行的事务

3 由于有压缩备份选项可以节省磁盘空间和网络带宽

4 自动的备份校验

5 更快的恢复速度,更短的恢复时间

三  备份原理

Percona XtraBackup是基于Innodb的 crash-recovery功能。在备份的过程中,XtraBackup拷贝Innodb的数据文件,但是在拷贝数据文件的过程中,数据库一直在运行,会有增删改的操作,这样会造成拷贝的数据文件中的数据状态是不一致的。但随后会对文件进行crash recovery,是数据恢复一致。(原理是基于crash-recovery)

Innodb维护了一个redo log,又叫做transaction log(事务日志),包含了数据文件的所有变化,当Innodb启动的时候,会检查数据文件和redo log,然后做两件事:将已提交的事务应用到数据文件,对修改了数据但未提交的事务回滚。(应用已提交,回滚未提交)

当Percona XtraBackup开始备份的时候,会记住日志的日志序列号(LSN),然后开始拷贝数据文件。拷贝这些文件需要花费一定时间,当在拷贝过程中,数据文件可能会发生变化,所以你的备份就是不同时间点的数据状态,即数据不一致了。Percona XtraBackup是如何解决这个问题的呢?与此同时,Percona XtraBackup在后台会另外启动一个进程,监控事务日志文件然后从中拷贝变化。Percona XtraBackup要不断进行此操作,因为redo log 是循环写的,写完之后会被覆盖重写。Percona XtraBackup需要从启动备份后redo log的每次变化。(两个进程 一个进程拷贝数据文件,一个进程通过日志文件拷贝变化)

完成innodb引擎的数据文件备份后,会进行非Innodb引擎表的备份。Percona MySQL 5.6 有backup locks,Percona XtraBackup利用此功能替代FLUSH TABLES WITH READ LOCK,这样就可以避免堵塞Innodb表的DML操作。

总结备份过程:

1 首先拷贝Innodb表的数据文件(利用两个进程 一个拷贝文件一个拷贝变化)

2 如果支持 backup lock,利用LOCK TABLE FOR BACKUP拷贝非Innodb表的数据文件(percona MySQL 5.6+ 支持oracle的MySQL支持吗?)

3 使用 LOCK BINLOG FOR  BACKUP 禁止所有改变Exec_Master_Log_Pos 或 Exec_Gtid_Set的操作。完成redo log的备份和获取binlog的日志中的坐标输出到备份目录。然后释放锁

四 恢复原理

恢复备份可以利用 xtrabackup --copy-back  或 xtrabackup --move-back选项。

首先读取配置文件my.cnf中参数datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir并检查目录是否存在。然后恢复MyISAM表,索引等,随后恢复Innodb的表和索引。

需要注意的时候在恢复完成后需要修改目录的属组属主,例如:chown -R mysql.mysql  dir

--copy-back 复制备份文件到恢复目录

--move-back 将备份文件移动到恢复目录,主要这个会删除备份文件,在磁盘空间不足的时候可以使用

 

参考资料:

官方文档 https://www.percona.com/doc/percona-xtrabackup/2.4/how_xtrabackup_works.html

博客:https://www.cnblogs.com/zhoujinyi/p/5888271.html

阿里云数据库内核月报 http://mysql.taobao.org/monthly/2016/03/07/

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值