简介
Percona XtraBackup 是 Percona
公司基于 C++
开发的一个用于 MySQL
数据库 物理热备 的 免费开源 的备份工具。
XtraBackup 优势
- 支持
InnoDB
热备和增量备份 - 支持流压缩传输到其它服务器
- 备份速度快,比较容易地创建主从同步
- 备份时不会增加服务器负载
安装
1、下载 Percona-XtraBackup
1 | $ wget http://devops-files.oss-cn-qingdao.aliyuncs.com/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm |
2、rpm
方式安装
1 | $ rpm -ivh percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm |
报错信息:
1 | warning: percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY |
解决方法:
1 | $ wget http://devops-files.oss-cn-qingdao.aliyuncs.com/libev-4.15-1.el6.x86_64.rpm |
1 | $ rpm -ivh percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm |
报错信息:
1 | [root@hop02 src]# rpm -ivh percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm |
解决方法:
查看操作系统版本,CentOS 6
下载 el6
的安装包即可。
1 | $ cat /etc/redhat-release |
Tips:不要轻易在真实生产环境中直接安装,因为升级的过程中比较容易出现系统出错。
原理
备份原理
innobackupex
在后台线程不断追踪 InnoDB
的日志文件,然后复制 InnoDB
的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用 InnoDB
崩溃恢复代码执行事务日志(redo log
),以达到数据的一致性。备份分为两个过程:
- backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
- preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。
备份过程
1 | 1)复制已有的redo log,然后监听redo log变化并持续复制 |
XtraBackup
基于 InnoDB
的 crash recovery
机制,在备份还原时利用 redo log
得到完整的数据文件,并通过全局读锁,保证 InnoDB
数据与非 InnoDB
数据的一致性,最终完成备份还原的功能。
恢复过程
apply-log
- 模拟
MySQL
进行recover
,将redo log
回放到数据文件中。 - 等到
recover
完成 。 - 重建
redo log
,为启动数据库做准备。
copy-back
- 将数据文件复制回
MySQL
数据目录。 - 还原完成。
InnoDB
数据会被恢复至备份结束时(全局读锁时)的状态,而非 InnoDB
数据本身即是在全局读锁时被复制出来,它们的数据一致。
实践
全量备份
1 | # !/bin/bash |
备份报错:
1 | 190812 13:39:54 >> log scanned up to (491275222500) |
解决方案:
1 | 1)shell> ulimit -n 65535 |
总结
- 优先使用高版本
XtraBackup
。 - 尽量不要使用
XtraBackup
自带的增量 备份,因为后期使用或者恢复不太方便。 - 备份结束时,请立即
apply-log
,这样能够知道备份集是否可用。