GoldenDB 基于 XtraBackup 实现备份恢复,支持全量/增量备份和单库/集群恢复,保证数据一致性。
原文标题:数据库系列之GoldenDB备份恢复
原文作者:牧羊人的方向
冷月清谈:
GoldenDB 备份类型包括数据文件备份(全量和增量)、binlog 日志备份、活跃事务列表备份和集群元数据备份。数据备份策略支持定时和实时两种模式。binlog 日志默认每 2 小时备份一次。活跃事务列表每 30 秒查询一次,并每 60 秒归档一次。集群元数据备份包括全量备份和 DDL 操作时的增量备份。
备份过程会占用磁盘 IO 和网络 IO,并短暂持有 FTWRL 锁。恢复过程同样会占用磁盘 IO 和网络 IO,且数据库需要启停操作。建议备份操作避开批处理业务高峰期,恢复操作则需停业务并禁用代理。
GoldenDB 的备份流程包括:数据备份(定时和实时两种方式)、binlog 日志备份、活跃事务列表备份和集群元数据备份。恢复流程包括单 DB 恢复(全量和增量两种方式)和集群恢复。集群恢复涉及元数据恢复、每个 Group 的 DB 恢复、应用 binlog、回滚事务、主机 DB 打包和备机解压等步骤。
怜星夜思:
2、文章提到了 FTWRL 会导致 DML 堵塞,在实际生产环境中,如何降低 FTWRL 的影响?
3、GoldenDB 的增量备份是如何实现的?它与全量备份相比,有哪些优缺点?
原文内容
GoldenDB备份恢复是基于xtrabackup实现的,本文简要介绍GoldenDB备份恢复流程和实现原理。
1、备份恢复原理
Xtrbackup是基于innodb的在线备份工具,它通过拷贝数据库文件和日志的方式完成物理备份,因此相对逻辑备份速度会更快。
1)Xtrabackup备份流程
-
记录xtrabackup_log。
-
拷贝所有表的*. ibd数据文件和ibdata1文件到指定备份目录。
-
执行命令:FLUSH TABLE WITH READ LOCK
-
拷贝.frm、.MYD、.MYI、misc files。
-
获取binlog日志的position
-
执行命令UNLOCK TABLES
-
结束xtrabackup备份任务,拷贝xtrabackup_log
Xtrabackup备份为了获取一致性位点,依赖于全局读锁(FTWRL)。在持有锁的这段时间,整个数据库实质上不能对外提供写服务的。此外,由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。即使是备库,也有SQL线程在复制来源于主库的更新,上全局锁时,会导致主备库延迟。
-
Xtrabackup全量备份语句
xtrabackup --backup --target-dir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
-
Xtrabackup增量备份语句
xtrabackup --backup --target-dir=/mnt/data/v1/ --incremental-basedir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
2)xtrabackup恢复流程
全备恢复会启用xtrabackup内嵌的innodb实例,回放xtrabackup日志xtrabackup_log,将提交的事务信息变更应用到innodb数据/表空间,同时回滚未提交的事务。
-
恢复语句
xtrabackup --copy-back --target-dir=/mnt/data/all/
Data数据文件备份是对表数据的备份,分为全量备份和增量备份。全量备份是拷贝所有表的*. ibd数据文件和ibdata1文件到指定备份目录,增量备份是拷贝所有表从上次全量备份产生的增量数据变化,文件后缀名. delta和.meta。数据备份完成后会拷贝拷贝.frm、.MYD、.MYI、misc files等表结构文件信息,最后将所有备份文件压缩在在“$dbip_FULL_$back_start_time.xbstream”文件内。
Binlog日志备份是备份数据节点$HOME/data/binlog目录下的binlog二进制文件,用于恢复过程中的数据一致性恢复。
活跃事务列表GTID备份用于保证全局节点恢复数据一致性。
集群的元数据备份包括数据字典,用户密码,索引信息等。
-
定时备份:根据定时备份策略定时发起,备份模式包括不备份、全量备份和增量备份
-
实时备份:在运维平台手动发起,满足特定场景下的实时备份和恢复需求
-
每个DB节点定时备份binlog日志,默认备份间隔2小时
-
DBagent参数binlog_backup_interval设置
-
每隔30 s向GTM查询当前活跃事务列表信息和向DBagent查询当前binlog位置信息,并将查询结果信息保存在.current 文件中
-
每隔60 s查看.current文件是达到1 M,如果达到1 M,将.current文件归档到backup_root_directory配置路径下的子目录“Active_TX_Archive”下
-
由clustermanager.ini中参数active_tx_timing_query控制,1表示打开
-
全量备份:由CM通知,将整个集群元数据信息全部备份
-
增量备份:在DDL操作时,将相关数据字典信息和索引信息备份下来
-
磁盘IO:从本地磁盘读数据,占用磁盘读IO
-
网络IO:从本地上传到NFS共享目录,影响DB服务器的网络IO
-
表加锁:备份过程中会有短暂的flush table with read lock锁
因此,建议建议备份操作与批处理业务操作放在不同的时间段执行
-
磁盘IO:数据文件拷贝到待恢复数据磁盘上,占用磁盘写IO
-
网络IO:从备份设备恢复数据到DB服务器上,影响DB服务器的网络IO
-
恢复过程中DB会有启停操作
因此,建议恢复过程中停业务,禁用proxy。
2、备份流程
-
MDS将备份任务入库,对应的表是mds.timing_backup_task_info
-
MDS接收到备份结果后入库,相应的表是:gdb_cluster_backup_history_detail和goldendb_omm.gdb_cluster_backup_history
-
备份文件保存在$HOME/backup_root
-
备份可以指定主节点备份或者备节点备份
-
binlog日志通过DBagent定时任务备份,默认备份间隔为2小时
-
备份文件默认保存在备份路径的BINLOG_BACKUP 目录下
-
当前备份记录会保存在etc/dbagent_info/binlogbackup.info,作为下一个备份开始位置
-
参数binlog_backup_interval控制是否备份binlog
-
CM每隔30 s向GTM查询当前活跃事务列表信息和向DBagent查询当前binlog位置信息,并将查询结果信息保存在备份路径的.current 文件中
-
CM每隔60 s查看.current文件是达到1 M,如果达到1 M,将.current文件归档到backup_root_directory配置路径下的子目录“Active_TX_Archive”下
-
CM向MDS发送元数据备份,全量备份该集群下数据字典、密码信息和索引信息
-
DDL操作时,MDS会增量备份数据字典和索引信息
3、恢复流程
-
获取恢复所需要的文件
-
通过全量备份文件(及增量文件)恢复DB
-
应用binlog 文件
-
回滚恢复时刻的活跃事务
-
对集群的元数据进行恢复。
-
恢复集群中每个Group的DB
-
获取恢复所需要的文件。
-
通过全量备份文件(及增量文件)恢复主机DB
-
对主机DB应用binlog 文件
-
对主机DB回滚恢复时刻的活跃事务
-
对主机DB打tar包
-
将主机生成的tar包解压到每个备机DB
-
设定GTM的最大GTID值。
参考资料:
-
https://blog.csdn.net/jolly10/article/details/80065204
-
https://www.cnblogs.com/cchust/p/4603599.html
-
https://www.cnblogs.com/cchust/p/5452557.html
-
GoldenDB分布式数据库备份恢复技术