KADB 是北京人大金仓信息技术股份有限公司基于开源的greenplum数据库研发的一款分布式关系型数据库,全称是KingbaseAnalyticsDataBase。
作为一款分布式关系型数据库KADB提供了两种备份工具:一种是pg_dump,另一种是gpbackup。
pg_dump是从postgresql继承过来的工具,它只能通过MASTER节点采用串行方式备份数据库。
具体的参数说明可以通过执行
pg_dump --help获取
用法:
pg_dump [OPTION]... [DBNAME]
常用选项:
-f, --file=FILENAME 备份文件的名称
-F, --format=c|t|p 输出文件的格式,c表示二进制文件,t表示tar,p表示文本
-i, --ignore-version 当服务版本不匹配时,忽略服务版本。
-v, --verbose verbose模式
-Z, --compress=0-9 采用压缩模式存放备份结果,并指定压缩级别
--help 显示帮助
--version 显示版本,然后退出
控制输出内容的选项
-a, --data-only 备份中只含有数据,而没有schema信息。
-b, --blobs 在备份中包含大对象。
-c, --clean 在创建前,删除schema
-C, --create 在备份文件中含有创建数据库的命令。
-d, --inserts 备份数据使用insert命令模式
-D, --column-inserts 备份数据使用insert命令模式,并提供列名。
-E, --encoding=ENCODING 备份文件使用的字符集
-n, --schema=SCHEMA 只备份特定的SCHEMA
-N, --exclude-schema=SCHEMA 备份中排除特定的SCHEMA
-o, --oids 在备份中包含oid
-O, --no-owner 如果采用文本格式备份,越过对象所有者的还原信息。
-s, --schema-only 只备份SCHEMA的信息,而不备份它们的数据。
-S, --superuser=NAME 如果使用文本格式,指定超级用户的名称
-t, --table=TABLE 只备份特定的表,视图,或者序列
-T, --exclude-table=TABLE 备份中排除特定的表,视图或者序列。
-x, --no-privileges 不备份权限(grant/revoke)
--disable-dollar-quoting 只使用表中SQL的"",不需使用$$处理文本分割
--use-set-session-authorization 使用SESSION AUTHORIZATION命令替代
ALTER OWNER commands设置所有权
--gp-syntax 备份中的SQL使用KADB句法,默认选项
--no-gp-syntax 备份中的SQL不使用KADB句法
连接选项
-h, --host=HOSTNAME 数据库主机名,或者socket目录
-p, --port=PORT 数据库服务端口
-U, --username=NAME 指定用户名
-W, --password 强制口令提示
pg_dump备份样例:
- 创建备份数据库
drop database if exists restore;
create database restore;
- 登陆备份库,创建备份表
CREATE TABLE t1(i int, j int) with(appendonly=true,orientation=row);
INSERT INTO t1 SELECT a , a from generate_series(1,10000) as a;
- 执行备份
pg_dump -d restore -Fc -t t1 -f dbbackup/t1.dmp
对应pg_dump备份的结果,如果数据库出现故障,或者要进行数据移植,需要进行数据恢复,要使用工具pg_restore。
具体参数说明可以通过pg_restore --help获取。
具体用法:
pg_restore [OPTION]... [FILE]
常见选项:
-d, --dbname=NAME 指定连接数据库的名称。
-f, --file=FILENAME 输出文件名称
-F, --format=c|t 指定备份文件格式,c表示自定义,t表示tar
-i, --ignore-version 如果版本不匹配,忽略版本
-l, --list 打印归档TOC的汇总信息
-v, --verbose 使用verbose模式
--help 显示帮助,然后退出
--version 显示版本,然后退出
控制还原的选项
-a, --data-only 只还原数据
-c, --clean 在创建之前删除schema
-C, --create 创建目标数据库
-I, --index=NAME 还原索引
-L, --use-list=FILENAME 按照文件指定顺序还原表
-n, --schema=NAME 只还原特定SCHEMA的对象
-O, --no-owner 跳过特定所有者对象的还原
-P, --function='NAME(args)' 还原特定的函数,函数的名字必须与TOC中的一致,并且使用单引号括起。
-s, --schema-only 只还原SCHEMA,不还原相关数据。
-t, --table=NAME 只还原特定的表
-x, --no-privileges 跳过特定权限的还原 (grant/revoke)
--use-set-session-authorization 使用SESSION AUTHORIZATION替代 ALTER OWNER TO命令
--no-data-for-failed-tables 不还原创建表失败的数据
-1, --single-transaction 还原作为一个单一事务进行。
连接选项:
-h, --host=HOSTNAME 指定数据库服务的主机名或者socket目录
-p, --port=PORT 数据库服务端口号
-U, --username=NAME 指定连接的数据库用户
-W, --password 强制口令提示
-e, --exit-on-error 遇到错误退出,默认模式是继续。
对刚才的进行恢复测试。
- 删除备份库,创建一个空的数据库。
drop table t1;
- 恢复备份库
pg_restore -d restore -Fc dbbackup/t1.dmp -t t1
pg_dump是一种逻辑备份方式。它有两个主要的限制。一方面备份速度受MASTER节点数据吞吐能力的限制。另外,MASTER用来存放备份文件的空间必须足够大,能够存放所有segment节点的备份数据。所以这种方式更适合用在数据迁移的场景中.比如把postgre数据库(或者netezza)的数据迁移到greenplum中,或者在不同架构的KADB数据库间进行数据迁移,比如4节点的服务的数据,向8节点的服务迁移。
对于海量数据仓库来而言,通过pg_dump/pg_restore进行备份/恢复,一方面在性能上无法满足业务对备份/恢复时间窗口要求,另外对MASTER可以访问的存储容积和性能也有比较高的要求。为了解决这两点问题,KADB在POSTGRESQL的基础上提供了自己的备份/恢复工具gpbackup/gprestore 。它们不需要通过master进行数据库的备份恢复,每个segment和master并行备份/恢复自己的数据,这样master就不会再成为瓶颈,从而大幅提高备份/恢复的速度。gpbackup和gprestore在下一章介绍。