GoldenDB备份恢复是基于xtrabackup实现的,本文简要介绍GoldenDB备份恢复流程和实现原理。
1、备份恢复原理
1.1 xtrbackup备份恢复原理
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/
1.2 备份恢复架构图

1.3 备份文件类型

1.3.1 data数据文件备份
Data数据文件备份是对表数据的备份,分为全量备份和增量备份。全量备份是拷贝所有表的*. ibd数据文件和ibdata1文件到指定备份目录,增量备份是拷贝所有表从上次全量备份产生的增量数据变化,文件后缀名. delta和.meta。数据备份完成后会拷贝拷贝.frm、.MYD、.MYI、misc files等表结构文件信息,最后将所有备份文件压缩在在“$dbip_FULL_$back_start_time.xbstream”文件内。
1.3.2 binlog日志备份
Binlog日志备份是备份数据节点$HOME/data/binlog目录下的binlog二进制文件,用于恢复过程中的数据一致性恢复。
1.3.3 活跃事务列表备份
活跃事务列表GTID备份用于保证全局节点恢复数据一致性。
1.3.4 集群元数据备份
集群的元数据备份包括数据字典,用户密码,索引信息等。
1.4 备份恢复策略

定时备份:根据定时备份策略定时发起,备份模式包括不备份、全量备份和增量备份
实时备份:在运维平台手动发起,满足特定场景下的实时备份和恢复需求
每个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操作时,将相关数据字典信息和索引信息备份下来
1.5 备份恢复影响
磁盘IO:从本地磁盘读数据,占用磁盘读IO
网络IO:从本地上传到NFS共享目录,影响DB服务器的网络IO
表加锁:备份过程中会有短暂的flush table with read lock锁
因此,建议建议备份操作与批处理业务操作放在不同的时间段执行
磁盘IO:数据文件拷贝到待恢复数据磁盘上,占用磁盘写IO
网络IO:从备份设备恢复数据到DB服务器上,影响DB服务器的网络IO
恢复过程中DB会有启停操作
因此,建议恢复过程中停业务,禁用proxy。
2、备份流程

2.1 data数据备份流程

MDS将备份任务入库,对应的表是mds.timing_backup_task_info
MDS接收到备份结果后入库,相应的表是:gdb_cluster_backup_history_detail和goldendb_omm.gdb_cluster_backup_history
备份文件保存在$HOME/backup_root
备份可以指定主节点备份或者备节点备份
2.2 binlog日志备份流程
binlog日志通过DBagent定时任务备份,默认备份间隔为2小时
备份文件默认保存在备份路径的BINLOG_BACKUP 目录下
当前备份记录会保存在etc/dbagent_info/binlogbackup.info,作为下一个备份开始位置
参数binlog_backup_interval控制是否备份binlog
2.3 活跃事务列表备份流程
CM每隔30 s向GTM查询当前活跃事务列表信息和向DBagent查询当前binlog位置信息,并将查询结果信息保存在备份路径的.current 文件中
CM每隔60 s查看.current文件是达到1 M,如果达到1 M,将.current文件归档到backup_root_directory配置路径下的子目录“Active_TX_Archive”下
2.4 集群元数据备份
CM向MDS发送元数据备份,全量备份该集群下数据字典、密码信息和索引信息
DDL操作时,MDS会增量备份数据字典和索引信息
3、恢复流程

3.1 单个DB恢复流程
获取恢复所需要的文件
通过全量备份文件(及增量文件)恢复DB
应用binlog 文件
回滚恢复时刻的活跃事务

3.2 集群恢复流程
对集群的元数据进行恢复。
恢复集群中每个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分布式数据库备份恢复技术




