关键字:
KingbaseES、物理备份、恢复、人大金仓
绪论
作为对外服务的核心之一,对数据库的备份与恢复是我们运行维护服务器的关键。在面临硬盘损坏、地质灾害等不可抗力因素导致的数据损坏时,在没有高可用设计支持的情况下,对数据的备份就是数据可靠性保证的最后底线;而数据的可靠性体现了服务的可靠性,因此定期对数据库进行备份十分重要。
数据库的备份分为物理备份与逻辑备份,尽管逻辑备份在实际备份时有着轻便,快捷的优势;然而当数据量级上升至一定高度后,逻辑备份的性能问题就暴露出来了;同时物理备份拥有备份集群,具体的备份策略应当以具体的备份需求决定。首先是本文涉及到的一些概念与解释,如表1所示。接下来本文将围绕物理备份的工具及简单实用展开介绍。
表1 概念与解释
概念 | 解释 |
${single_path} | 单机数据库安装路径 |
${single_data_path} | 单机数据库data路径 |
${cluster_path} | 集群安装路径 |
${cluster_data_path} | 集群data路径 |
${repo _path} | 备份路径 |
备份与恢复
进行物理备份时需要使用命令./sys_backup初始化备份。初始化备份时,首先需要设置备份相关的内容。备份的设置文件名为sys_backup.conf,根据不同数据库形式有不同的路径:单机位于文件夹${single_path}/Server/share中,集群位于${cluster_path}/share内。该文件内容如图1所示。
图1 sys_backup.conf
如果只关注如何进行快速备份的话,需要重点关注图1中前3个红框标注的内容。其中:_target_db_style根据需要可以设置为cluster或single-pro,cluster对应集群模式的目标数据库实例,single-pro对应集群模式的每个DB节点独立备份;_one_db_ip填写需要备份的数据库所在节点ip地址;_repo_ip用作配置执行备份的ip地址,如果不需要远程备份可直接填写为当前节点的ip,具体远程备份的配置将会在后续章节介绍;_os_user_name是执行备份的节点用户,_repo_path是备份路径,记做${repo _path},这里注意的是备份路径需要对执行备份的节点用户有可读写的权限。
此外对于集群备份,需要提前取消位于${cluster_data_path}/kingbase.conf中对参数archive_command的注释符。同时,_target_db_style若为single-pro,还需要将同样在该文件内的参数archive_mode设置为always;_target_db_style若为cluster,需要将archive_mode修改为on(默认值为on,但部署集群时可能会修改该参数),修改后请重启数据库;然后使用sys_encpwd配置数据库免密确保能够正常执行备份恢复。
另外图1中有一项蓝框选中的选项_archive_statistics,涉及到实际运维时可以打开该选项,该选项表示是否启用归档统计功能。对于日志归档要求较高,不经常备份集群而对丢失日志十分敏感的集群可以考虑开启。
单机的快速备份在“集群备份设置”基础上,需要将_target_db_style设置为single模式;然后需要关注最后一个红框的内容,其中:_single_data_dir是要备份的单机数据库data路径,即${single_data_path};single_bin_dir是单机数据库的bin目录,该目录通常为${single_path}/Server/bin;_single_db_user是_single_data_dir下的单机数据库使用的用户名;_single_db_port是_single_data_dir下的单机数据库使用的端口。
需要注意的是,单机数据库archive_mode默认为off,进行备份初始化之前需要提前修改该参数为on,同时取消对参数archive_command的注释符,这两个参数同样在${single_data_path}的kingbase.conf文件中。
远程节点备份是一种冗余式备份,这种备份方式能够在保证备份可靠性的同时,降低对目标备份节点的负载。准备远程备份的时候需要在备份节点上准备好与待备份节点相同的数据库形式(需要保证路径完全一致,比较怕麻烦的话可以直接使用scp命令拷贝除data以外的其他目录),然后在集群或者单机物理备份准备的基础上,将_repo_ip设置为备份节点ip,其他设置仍按照对应的备份设置去填写。
在完成备份的设置后,执行./sys_backup.sh init以初始化备份。执行成功输出如图2所示。可以看到在完成备份初始化后会立刻执行一次全量备份。
如果有报错的话,可以考虑清除/tmp下所有带sys_rman的文件及文件夹(可以执行rm -rf /tmp/*sys_rman*),然后删除已经生成的备份路径;同时根据提示信息以及给出的日志内容分析问题所在。
图2 成功初始化备份
备份的手动执行需要使用工具sys_rman,sys_rman的功能非常复杂,本文因主要讲物理备份,因此主要从工具提供的backup、restore以及verify三个主要功能出发。sys_rman的命令基础是:
sys_rman --config=${repo _path}/sys_rman.conf --stanza=kingbase
其中stanza的值与sys_backup.conf文件中的参数_stanza_name值相同,文件中的预设值为kingbase。
备份集群时,在基础命令的基础上,加上backup即可。参考命令如下:
sys_rman --config=${repo _path}/sys_rman.conf --stanza=kingbase backup
backup命令下一些常用的参数如下:
--archive-check:开启归档WAL检查。在备份参考命令尾部添加该参数后,工具在备份过程中将确保WAL文件已经归档到REPO的archive目录下。默认开启,以提供备份集PITR(Point In Time Recovery,即时恢复)功能。禁用该功能需要添加参数--no-archive-check。
--archive-copy :开启拷贝WAL到备份集。在备份参考命令尾部添加该参数后,工具将拷贝备份过程中的WAL文件到REPO的backup目录下;这将保证备份集自身包含备份期间的WAL日志。推荐在备份时间段具有大量业务开展的系统开启拷贝选项,默认不开启。
--type:指定备份的类型。该参数支持以下值:
- full:全量备份,不依赖已有备份集;
- diff:差异备份,依赖前一个全量备份集;
- incr:增量备份,依赖前一个备份集;
- page:块增量备份,依赖前一个备份集。
不指定该参数时,默认执行增量备份。添加该参数格式如下:--type=full。
此外需要注意的是,如果要进行块增量备份的话,需要在单机或集群的kingbase.conf中的shared_preload_libraries参数后添加“ktrack”,并在该参数下添加ktrack.map_size键,同时设置相关值;完成设置后重启数据库,并启用该扩展;具体可以根据参考资料提供的内容去设置。
恢复集群时,在基础命令的基础上,加上restore即可。参考命令如下:
sys_rman --config=${repo _path}/sys_rman.conf --stanza=kingbase restore
restore命令下一些常用的参数如下:
--force:设置还原时强制覆盖目标DATA目录已有的文件。默认关闭,开启需要在恢复参考命令后添加 --force。
--set:设置还原时选择指定的备份集。不指定时工具将选择最新的备份集。即latest,指定时参考如下: --set=20230921-153358F_20230921-153401I。
--type:指定还原时的恢复目标类型。该参数值默认为default,支持以下值:
- default - 恢复到归档WAL日志的末尾
- immediate - 不拉取归档的WAL日志
- lsn - 恢复到--target指定lsn
- name - 恢复到--target指定备份标记点(backup_label)
- xid - 恢复到--target指定xid
- time - 恢复到--target指定自然时间
- preserve - 保留原有的kingbase.auto.conf文件
- standby - 在kingbase.auto.conf中增加standby_mode=on
- none - 不产生kingbase.auto.conf文件
--target:设置还原后恢复行为的目标。根据还原时—type参数值的不同,--target选项可以是时间、标签、xid、lsn等。举例: --target=2023-09-21 14:15:11 EST。
--target-action:设置还原后恢复完毕之后的数据库实例状态。该参数支持以下值:
- pause:当恢复到指定目标后暂停数据库实例
- promote:当恢复到指定目标后,数据库进入读写状态并切换时间线。
- shutdown:当恢复到指定目标后关闭数据库实例
该参数默认值为pause,但需要注意的是:此选项仅在数据库实例的配置hot_standby=on生效;如果没有此配置,数据库实例将进入读写状态并切换时间线。
检查备份集的内容。在基础命令的基础上,加上verify即可。参考命令如下:
sys_rman --config=${repo _path}/sys_rman.conf --stanza=kingbase restore
该命令同时会校验归档的wal日志可靠性。
总结
备份还原恢复是数据库重要的功能之一,我们KES当前的备份还原工具sys_rman在物理备份上能够满足基本的备份还原需要。然而文档中介绍的只是冰山一角,sys_rman的功能丰富度可以说能够应对绝大多数备份还原的需求。如果感兴趣可以翻阅参考资料内的各手册深入学习。