人大金仓数据库KingbaseES 数据逻辑备份
关键字:
逻辑备份、恢复、人大金仓、KingbaseES
一、绪论
作为对外服务的核心之一,对数据库的备份与恢复是我们运行维护服务器的关键。在面临硬盘损坏、地质灾害等不可抗力因素导致的数据损坏时,在没有高可用设计支持的情况下,对数据的备份就是数据可靠性保证的最后底线;而数据的可靠性体现了服务的可靠性,因此定期对数据库进行备份十分重要。
数据库的备份分为物理备份与逻辑备份,物理备份在备份时通常需要进行停机操作,以确保备份的完整性,同时对恢复的版本,环境有一定的要求;而逻辑备份作为一种更为轻量的备份,适用于数据量较小的场景,同时对环境要求大大降低,因此逻辑备份同样受到青睐。具体的备份策略优劣则完全取决于需求,本文将围绕逻辑备份常用的工具展开介绍。
在开始介绍前,首先对本文涉及的一些概念或缩写进行解释,如表1所示。
表1 概念与解释
概念 | 解释 |
${db_path} | 数据库安装路径 |
${data_path} | 数据库的数据路径 |
实例50804 | 运行在端口号50804上的实例 |
数据库集簇 | 数据库数据目录下包含的多个数据库 |
需要注意的是,这里备份的数据库并不是我们平日说的“KingBaseES(KES)数据库”或是“Oxx数据库”,这里的数据库指的是我们使用ksql、jdbc等方式中通过参数所指定的数据库。举个例子,我们使用ksql连接上部署在54321的KES数据库,需要使用命令:ksql -U xxxx -p 54321 –d test,这个命令表示我们使用用户名为xxxx登录部署在端口号为54321上的数据库,而test就是我们所访问的数据库。这个数据库可以通过SQL命令:CREATE DATABASE ${database_name};的方式创建。因此一个数据库实例对应且唯一对应一个${data_path},但可以包含多个数据库,即数据库集簇。
二、单一数据库逻辑备份工具——sys_dump
sys_dump是对单一数据库进行逻辑备份的工具,其二进制文件在磁盘中的路径在${db_path}\Server\bin。可以根据备份文件的类型可以将备份文件分为两类:dmp与sql,这两类文件的恢复方式也各不相同,下面将分别介绍如何使用两类文件进行备份与恢复。
2.1 备份为dmp文件并恢复
使用用户system对数据库test被备份为dmp文件使用的命令如下:
./sys_dump -Usystem -dtest -p50804 -Fc > backup.dmp
其中50804为数据库实例所运行的端口号,参数-F表示文件输出格式,c为custom模式,这里输出为dmp格式。箭头后面的内容表示输出文件的路径与文件名,只写文件名则在当前工作路径下输出名为backup.dmp的文件。运行该命令需要所使用的用户口令(密码),具体如下图所示。
使用backup.dmp文件恢复数据库需要使用到工具sys_restore,恢复的对象可以是本机的另一个数据库实例,也可以是另一台机器的数据库实例。这里我们以本机的另一数据库实例为例,使用的命令如下:
./sys_restore -Usystem -dtest -p50805 backup.dmp
其中50805表示运行在端口50805上的数据库实例 。命令的含义是使用实例50805上的system,将backup.dmp的内容恢复至50805中的test数据库中;需要注意的是,这个数据库必须已经使用CREATE DATABASE命令创建。通过使用命令\d查询数据库情况可以看到实例50804上的内容已经被恢复至实例50805上。
2.2 备份为sql文件并恢复
使用用户system对数据库test被备份为sql文件使用的命令如下:
./sys_dump -Usystem -dtest -p50804 -Fp > backup.sql
其中50804为数据库实例所运行的端口号,参数-F表示文件输出格式,p为plain模式,这里输出为sql格式。其余的内容与2.1的内容一致,这里我们直接看运行的效果。
还原backup.sql文件需要使用ksql,这里以还原至实例50805的test1数据库(需提前创建)为例,命令具体如下:
./ksql -U system -d test1 -p 50805 -f backup.sql
执行该命令后会将命令的执行情况输出至shell中,如下图所示(限于篇幅执行情况只截了部分内容):
连接至实例50805,查看数据库表情况,可以看到数据被恢复至了实例50805的test1数据库中,如下图所示。
三、数据库集簇逻辑备份工具——sys_dumpall
数据库集簇的备份方式与使用sys_dump备份sql文件的流程类似,但不同的地方在于:sys_dumpall备份时是对集簇中的每个数据库执行sys_dump,可能需要多次输入口令;同时使用的时候因为恢复角色和表空间信息需要较高的权限,因此需要使用数据库管理员账号。其余命令的详情和sys_dump部分基本一致。这里以备份实例50805上的数据库集簇为例,命令如下:
./sys_dumpall -Usystem -p50805 > backups.sql
命令的执行效果如下:
恢复时同样适用ksql工具,这里以将backups.sql恢复至实例50793为例,命令如下:
./ksql -U system -d test -p 50793 -f backups.sql
恢复时同样会输出命令的执行情况,命令的具体执行效果如下(限于篇幅执行情况只截了部分内容):
四、总结
逻辑备份与恢复的方便、快速、轻量与可移植是目前逻辑备份仍被广泛使用的原因之一,但对于数据量较大的场景下,物理备份的效率会更高。因此实际生产环境下,备份请务必根据生产环境的需要慎重考虑备份方式。