干货!RDS MySQL高频物理备份,看这篇就够了

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL的物理备份包含了全量备份、增量备份、逻辑事务日志备份。

数据库物理备份


MySQL的物理备份包含了全量备份、增量备份、逻辑事务日志备份。


全量备份

将数据库实例下的所有数据文件,做一次完整的备份。并可以基于全量备份的数据,恢复完整的数据库实例。


增量备份

以某次备份为基础,只备份在该次备份之后,发生变化的差异数据内容。增量备份的数据不是完整的数据库实例数据,必须结合全量备份一起使用,才能恢复出完整的数据库实例。


增量备份作为全量备份和逻辑事务日志备份的补充,有几个明显的优点。

  • 只备份有差异的数据,相比全量备份,数据量少,成本更低。
  • 基于文件备份,对数据库操作风险更低。
  • 基于文件物理恢复,相比逻辑事务日志恢复,成功率高,恢复RTO更低。


逻辑事务日志备份

MySQL的binlog记录了实例的逻辑事务日志。全量、增量备份只能恢复到备份的时刻,如果需要基于时间点的数据恢复(PITR),需要结合binlog回放日志到PITR时间点。


业界常见数据库增量备份方式


MySQL——page数据页扫描

MySQL下获取增量数据,需要通过Percona提供的的Xtrabackup工具,需要对数据库做全库文件扫描,挨个page比对LSN,通过LSN判断该page是否发生更改,来决定是否对这个page进行备份。


使用过Xtrabackup增量备份的朋友应该都发现一个问题,虽然一次增量备份产生的数据量远小于全量备份,但备份过程产生的磁盘读IO却与全量备份相当,这是因为都要对所有文件遍历读取一次,读的总数据量是一样的。而且增量备份对磁盘读IO的压力会高于全量备份,逐page读取比对,如果不是需要备份的增量page数据,需要立刻读取下一个page,这样两次page读取的间隔会小于全量备份,使的磁盘读IO压力更高。


Percona-Server——CPT(Change Page Tracking)变化页追踪

Percona Server版的MySQL在内核支持将变化的数据page,记录到位图中,在进行增量备份时,可以直接从位图记录中获取两次备份之间的变化的page信息,避免对实例文件的遍历读取来获取增量page。


Oracle——BCT(Block Change Tracking)块变更追踪

Oracle BCT记录数据文件里每个数据块block的变化,采用位图记录保存,增量备份时,通过位图信息,直接获取哪些数据块block发生了变化,避免全库扫描,加速了增量备份,降低了读IO量。


Oracle官网介绍:

https://docs.oracle.com/database/121/ADMQS/GUID-3BAA0D48-CA35-4CD7-810E-50C703DC6FEB.htm


Oracle的BCT(Block Change Tracking)是从10g版本开始支持。


快照增量备份——存储BCT(Block Change Tracking)块变更追踪

数据库实例运行在支持快照的存储上,实例备份则对存储进行快照操作。通过快照备份接口可以实现同一个盘的一次全量永久增量的备份,从而获得该盘上的数据库实例的增量数据,例如阿里云RDS通过云盘EBS快照接口,可以进行全盘的全量和增量数据库备份。


通用增量备份——文件系统抓取

通过对文件系统进行IO Capture的方式,获取到数据库文件的变化情况,从而获取增量数据,这种方式较为通用,但是对该模块的稳定性要求较高。


RDS MySQL高频物理备份


伴随着用户业务的快速增长,数据的操作更加频繁,数据库数据量越来越大。对实例备份成本控制,实例恢复RTO有着更高的需求。所以RDS MySQL在全量备份的基础上,引入了增量备份,推出高频物理备份功能。


RDS MySQL本地盘实例完成一次基于时间点恢复(PITR),需要先恢复全量备份集,然后回放从全量备份时间点到PITR时间点之间所有的binlog日志。如果两个时间点距离较远,达到天级别,binlog数据量可能会非常多,而binlog的恢复速度较慢,回放所有binlog日志会需要一个很长的时间,整个恢复任务绝大部分时间都消耗在回放binlog日志了,整个实例的恢复RTO会非常高。


降低恢复RTO的一个关键是,如何减少binlog日志回放耗时,降低需要回放的binlog日志数据量是一个不错的方式。实现更高的备份频率,备份频率由天级别,降低到小时级别,可以直接降低需要回放的binlog日志数量。


RDS MySQL本地盘实例备份,最低备份频率是一天一次全量备份。如果想降低恢复RTO,就需要提高备份频率,只能手动或者定时调用API发起全量备份。过于频繁的发起全量备份,又会使得产生的备份数据存储费用成倍数的增加,如何平衡恢复RTO与备份存储费用,真的是鱼与熊掌不可兼得吗?


现在他来了,RDS MySQL高频物理备份,同时兼得低恢复RTO与低备份存储费用,鱼与熊掌兼得。


RDS MySQL高频物理备份(小时级别物理备份)

MySQL高频物理备份,在全量备份基础上,引入增量备份,最低可以实现1小时级别的物理备份。到指定高频物理备份周期,会发起一次增量备份,增量备份产生的数据量会远小于全量备份(数据量多少数据库使用的业务形态有关)。

1.JPG


RDS高频物理备份——极致物理增量备份性能

想要提高MySQL物理增量备份的性能,如何降低物理增量备份的IO量是关键问题。如果能够在每次增量备份时,知道哪些数据page发生过变化,而不需要全数据库扫描的方式,看来是非常不错的方法。MySQL的redo log,就可以帮助实现这一方法。


MySQL redo log是InnoDB存储引擎特有的日志。又称重做日志。用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。redo log的每一个record格式如下,space_id代表了该record修改的表,offset表示修改了表中的page编号。


RDS MySQL高频物理备份,引入基于Redolog的CBT(Changed Block Tracking)技术,也称CPT(Changed Page Tracking)。在数据库实例运行时,可实时分析redo log数据,下次增量备份可以通过解析的数据,直接获取发生过变化的page数据。通过这个方式,避免了扫描数据库数据文件造成的磁盘IO开销,同时节省了备份时间。

2.JPG

相比数据库文件逐个page扫描,借助CBT技术,可以减少90+%的读IO,节省90+%的备份时间。


RDS MySQL高频备份恢复(快速恢复,RTO降低)

在高频物理备份场景下,备份恢复增加了一个增量恢复阶段,先恢复全量备份数据,然后将后续的增量数据合并到全量数据上去,最后回放最后一次增量备份时间点到PITR时间点之间的所有binlog日志。


全量+定期增量的物理备份方式,降低了物理备份时间点到PITR时间点的时间差,最低可以将降低到一小时内,最多回放1小时内的binlog,大幅降低所需要回放的binlog日志数据量。但是增加的增量恢复的阶段也有时间消耗呢?不要怕,增量备份恢复是物理数据恢复,不同于binlog逻辑恢复。

3.JPG

binlog日志回放的速度难于预估,需要MySQL处于运行状态下去逻辑执行SQL,与实例规格、使用方式、数据库版本、SQL类型等都有关系,恢复速度不稳定。物理恢复不需要MySQL处于运行状态下,恢复只受限于网络带宽与磁盘IO,是物理文件拷贝,与逻辑数据无关,恢复速度稳定,可以轻松达到数倍以上的恢复速度,增量恢复阶段增加的时间消耗,远远小于节省的binlog日志回放的时间消耗。


写在最后:

  • 如果您对RDS有更高频率的备份需求,请使用高频物理备份
  • 如果您对RDS有更低RTO的恢复需求,请使用高频物理备份


了解如何使用RDS高频物理备份,请点击「阅读原文」查看更多内容


 / End /  

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
关系型数据库 MySQL Shell
shell学习(十七) 【mysql脚本备份】
shell学习(十七) 【mysql脚本备份】
10 0
|
4天前
|
关系型数据库 MySQL Shell
备份 MySQL 的 shell 脚本(mysqldump版本)
【4月更文挑战第28天】
13 0
|
2天前
|
弹性计算 关系型数据库 MySQL
|
3天前
|
存储 SQL 关系型数据库
MySql入门教程--MySQL数据库基础操作
MySql入门教程--MySQL数据库基础操作
|
3天前
|
弹性计算 关系型数据库 MySQL
备份MySQL(mysqldump 版本)
【4月更文挑战第29天】
8 0
|
3天前
|
存储 关系型数据库 MySQL
RDS for MySQL测试
【4月更文挑战第28天】
|
4天前
|
SQL 关系型数据库 MySQL
【MySQL 探索之旅】初始MySQL数据库
【MySQL 探索之旅】初始MySQL数据库
|
4天前
|
存储 关系型数据库 MySQL
【MySQL探索之旅】MySQL数据库下载及安装教程
【MySQL探索之旅】MySQL数据库下载及安装教程
|
9天前
|
监控 关系型数据库 MySQL
Percona Xtrabackup快速备份MySQL
Percona Xtrabackup快速备份MySQL
|
9天前
|
存储 缓存 关系型数据库
Mysql增量备份之Mysqldump & Mylvmbackup
Mysql增量备份之Mysqldump & Mylvmbackup

相关产品

  • 云数据库 RDS MySQL 版