MySQL中如何选择合适的备份策略和备份工具

对于核心数据库,我们通常有两地三中心的部署要求。对于备份来说,也是如此。

一个备份应该有多个副本,每个副本存储在不同区域。

多介质部署

一个备份的多个副本应存储在不同介质上,如磁盘和磁带,防止单一介质失效。

定期检查备份的有效性

备份只是在做正确的事情,有没有把事情做对,还得依靠备份的有效性检查。

前两项,在条件允许的情况下,建议做。第三项必须做。

接下来,我们聊聊备份的相关话题,主要包括以下五方面的内容:

备份的常见分类。

MySQL中的备份工具。

mysqlbackup与mysqldump的备份恢复速度对比。

如何检测备份的有效性。

RTO和RPO 。

备份的常见分类 物理备份 VS 逻辑备份

物理备份,顾名思义,就是备份物理文件。其优缺点如下:

优点:

备份、恢复速度快。

尤其是恢复速度,直接关系着数据库服务的RTO。

无需实例在线。

在实例关闭的情况下,可直接拷贝文件,不用担心备份的一致性。

关闭实例进行备份,也称之为 “冷备” 。

缺点:

备份文件大。

恢复时,对平台、操作系统、MySQL版本有要求,必须一致或兼容。

只能在本地发起备份。

因为是拷贝物理文件,即使文件中存在很多“空洞”(大量DELETE导致),也无法通过恢复来收缩 。

对表的存储引擎有要求,无法备份MEMORY表。

逻辑备份,备份表的逻辑记录。其优缺点如下:

优点:

可移植性强。恢复时,对平台、操作系统、MySQL版本无要求。

灵活。尤其是在恢复时,可只恢复一个库或一张表。

对表的存储引擎没有要求,任何类型的表都可备份。

备份文件较小。

可远程发起备份。

恢复后,能有效收缩空间。

缺点:

备份、恢复速度慢。

实际上,单论备份速度,多线程备份其实也不慢。但恢复速度呢,即使是多线程恢复,也很慢。

备份会"污染"Buffer Pool。

业务热点数据会被备份数据驱逐出Buffer Pool 。

离线备份 VS 在线备份

离线备份,又可称之为 "冷备",即实例关闭的情况下进行的备份。此时,只能进行物理备份,即全量拷贝物理文件。

在线备份,又可称之为 "热备",即实例运行过程中进行的备份。此时,既可进行物理备份,又可进行逻辑备份。

因对业务侵入较小,线上一般使用在线备份。

 

全量备份 VS 增量备份

全量备份,即备份整个实例的全量数据。

增量备份,即只备份上次备份以来,那些发生了"变化"的数据。

通常来说,基于物理备份来实现增量备份较为简单,以MySQL为例,只需判断数据页的LSN是否发生了变化。

而对于逻辑备份,就很难实现,如常见的基于某个时间字段来进行增量备份,但其实,很难保证某个时间段之前的数据不被修改或删除。

 

MySQL中的备份工具 物理备份

物理备份相关的工具有:

XtraBackup

Percona公司开源的备份工具,适用于MySQL、MariaDB、Percona Server。

https://www.percona.com/software/mysql-database/percona-xtrabackup

XtraBackup目前维护的大版本有两个:

1. XtraBackup 2.4,适用于MySQL 5.6和5.7。

2. XtraBackup 8.0。适用于 MySQL 8.0。

之所以要维护两个版本,是因为MySQL 8.0中的redo log和数据字典的格式发生了变化。

mysqlbackup

MySQL企业级备份工具( MySQL Enterprise Backup ),适用于MySQL企业版。

https://dev.mysql.com/doc/mysql-enterprise-backup/4.1/en/mysqlbackup.html

Clone Plugin

MySQL 8.0.17引入的克隆插件。初衷是为了方便Group Replication添加新的节点。有了Clone Plugin,我们也能很方便的搭建一个从库,无需借助其它备份工具。

三者的实现原理基本相同,都是在备份的过程中,拷贝物理文件和redo log ,最后,再利用InnoDB Crash Recovery,将物理文件恢复到备份结束时的一致性状态。

 

逻辑备份

逻辑备份相关的工具有:

mysqldump

MySQL安装包自带的备份工具,单线程备份。

mydumper

由Facebook、SkySQL、Oracle和Percona开发人员维护的一个多线程备份工具,可实现行级别的并行备份。

https://github.com/maxbube/mydumper

mysqlpump

MySQL 5.7引入的备份工具,可实现表级别的并行备份。

MySQL Shell

MySQL Shell 8.0.21引入了一个工具-util.dumpInstance(),可实现行级别的并行备份。

这个工具对备份实例和恢复实例的版本有要求:备份实例 >= 5.6,恢复实例 >= 5.7。

SELECT ... INTO OUTFILE

SQL命令,可将表记录直接导出到文件中。

下面说说这几个工具的异同点:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwdys.html