KingbaseES数据库逻辑备份还原
逻辑备份还原的用法
数据库版本:KingbaseES V008R006C008B0014
简介
介绍2个KingbaseES用于备份还原的工具:
- sys_dump:逻辑备份
- sys_restore:逻辑还原
sys_dump 是 KingbaseES 用于逻辑备份的工具,可以将数据备份为不同类型的文件。支持数据库正在运行时备份,且不阻塞其他用户访问数据库。sys_dump 只用于备份单个数据库,如果要备份整个集簇需要使用 sys_dumpall(备份所有对象,包括角色、表空间,使用方法与sys_dump相同)。
sys_restore 则是将 sys_dump 备份的文件还原到数据库中,它们的连接参数都是相同的,控制参数存在些许区别。
文章目录如下
1. 语法参数
语法如下:
sys_dump <连接参数> [选项参数]
sys_restore <连接参数> [选项参数]
1.1. 通用连接参数
连接参数就是平时连接数据库的参数(必选),例如:
# 备份连接
sys_dump -U system -d kingbase -p 54321
# 还原连接
sys_restore -U system -d kingbase -p 54321
- -h:服务器IP(默认本地)
- -U:数据库用户名(默认Linux用户名)
- -d:数据库名称
- -p:数据库端口号(默认54321)
- -W:输入密码(可选)
1.2. 逻辑备份参数
- 逻辑备份就是 sys_dump 的参数
常用参数
-f:指定备份到某个文件或目录
-F:指定备份格式
-Fp:输出为SQL文件(默认)
-Fc:自定义格式归档为1个压缩文件, 比如指定为.tar .dmp等
-Fd:指定1个不存在的目录,自动将表、大对象备份到该目录下(每张表备份1个文件,非常适合备份大数据)
-Ft:tar格式,但tar格式不支持压缩
-Z:设置压缩级别(0~9),0不压缩,9最小压缩,默认中等
-j:并行备份
-v:详细模式
控制参数
-a:只转储数据,不包括模式
-g:只转储全局对象(角色和表空间)
-r:只转储角色
-s:只转储对象定义(模式)
-t:只转储名字匹配pattern的表
-n:只导出指定的模式
-s:只转储模式, 不包括数据
-t:只导出指定表
-N:不导出指定的模式
-T:不导出指定表
-x:不要转储权限 (grant/revoke)
-b:在转储中包括大对象
-B:排除转储中的大型对象
-c:在重新创建之前,先清除(删除)数据库对象
-C:在转储中包括命令,以便创建数据库
-E:转储以ENCODING形式编码的数据
-O:在明文格式中, 忽略恢复对象所属者
-S:在明文格式中使用指定的超级用户名
1.3. 逻辑还原参数
- 逻辑备份就是 sys_restore 的参数
常用参数
-f:指定文件/目录名(-为输出到stdout)
-F:指定还原文件格式(自动识别)
-Fc:sys_dump使用-Fc备份的文件
-Fd:sys_dump使用-Fd备份的文件
-Ft:sys_dump使用-Ft备份的文件
-c:删除-d指定库的对象
-C:自动创建sys_dump备份的库名
-l:打印归档文件的 TOC 概述
-v:详细模式
控制参数
-a: 只恢复数据, 不包括模式
-e: 发生错误退出, 默认为继续
-E: 跳过COPY时遇到的错误行
-I: 恢复指定名称的索引
-j: 执行多个并行任务进行恢复工作
-K: 指定加密密钥
-L: 从这个文件中使用指定的内容表排序输出
-n: 在这个模式中只恢复对象
-N: 不恢复此模式中的对象
-g: 恢复来自这个模式的对象,和-G一同使用
-G: 把对象恢复到这个模式,和-g一同使用目标模式和源模式的的数目应相同,或者只有一个目标模式
-O: 不恢复对象所属者
-P: 恢复指定名字的函数
-s: 只恢复模式, 不包括数据
-S: 使用指定的超级用户来禁用触发器
-t: 恢复命名关系(表、视图等)
-T: 恢复指定名字的触发器
-x: 跳过处理权限的恢复 (grant/revoke)
-1: 作为单个事务恢复
2. 逻辑备份方法
- 逻辑备份使用 sys_dump 工具
2.1. 导出数据为sql文件
sys_dump 默认导出为sql文件,所以只需要指定连接参数即可
./sys_dump -U system -p 54321 -d db1 > file.sql
或
./sys_dump -U system -p 54321 -d db1 -f file.sql
- 将库db1的数据导入到file.sql中
例如:在db1中创建1个schema(s1),在public下创建t1、t2表,在s1下创建t3表。
CREATE DATABASE db1;
\c db1
CREATE TABLE t1(id int);
INSERT INTO t1 VALUES(generate_series(1, 10));
CREATE TABLE t2(name text)
CREATE SCHEMA s1;
CREATE TABLE s1.t3(id int ,name text);
INSERT INTO s1.t3 VALUES (generate_series(1, 5), md5(random()));
然后将db1的数据转储为sql文件
转储的sql文件中正常包含创建schema、表,但是插入的语句并不会像上述例子使用函数,而是表中的真实数据
从图中可以得知,没有数据的表copy为空,有数据的表copy原库的真实数据。这也就意味着当某些表存在上千万或亿级数据时,转储的数据是非常庞大的。所以,这种方式只适用于少量数据的库,或者指定导出某些数据,不适用于大数据导出。
2.2. 自定义导出文件格式
可以通过参数 -Fc 来指定导出的文件格式,例如:
./sys_dump -U system -p 54321 -d db1 -Fc > file.dump
或
./sys_dump -U system -p 54321 -d db1 -Fc -f file.dump
2.3. 快速导出(并行)
sys_dump 参数 -Fd 将数据库中每张表都转储为1个文件,这也就意味着这种方式在导出数据时可以并行,且不影响其他数据。基本用法:
# 普通用法
./sys_dump -U system -p 54321 -d db1 -Fd -f 目录
# 并行加 -j
./sys_dump -U system -p 54321 -d db1 -Fd -j 10 -f 目录
每张表转储为1个文件(如果指定的目录file_dir不存在,会自动创建)
并行导出增加参数 -j <并行数>
2.4. 指定导出某些表
- 为了方便查看参数,这里省略连接参数 -U <用户名> -d <库名> -p <端口号>
只导出 t1 表(默认 public 模式)
./sys_dump -t t1 > file.sql
导出以 t 开头的所有表(默认 public 模式)
./sys_dump -t 't*' > file.sql
导出除 public 模式中以 t 开头表的所有对象
./sys_dump -T 't*' > file.sql
导出 public 模式中以 t 开头的全部表,但不导出 public 模式下以 2 结尾的表
./sys_dump -t 'public.t*' -T 'public.*2' > file.sql
并行导出 t1 表
./sys_dump -t t1 --parallel-lob-data -j 10 > file.sql
3. 逻辑还原方法
- 逻辑还原使用 sys_restore 工具
3.1. 指定某个库导入数据
sys_restore 不需要指定文件格式,因为它可以自动识别。例如:
./sys_restore -U 用户名 -d 库名 -p 端口号 <还原文件/目录>
不论是还原备份的目录还是自定义的dump文件,都不需要指定类型。如果碰上特殊情况必须指定类型,那么 sys_dump 备份的是什么类型,则还原就是什么类型。举个例子:
./sys_dump -d db1 -Ft -f ./back_file # 备份 ./sys_restore -d db1 -Ft ./back_file # 还原
sys_restore 只能还原 -Fc -Fd -Ft 备份的数据,对于使用 sys_dump -Fp 备份的sql文件 sys_restore 不支持,可以直接手动执行或者使用 ksql -f
./ksql -U 用户名 -d 库名 -p 端口号 -f 文件名
3.2. 还原时自动创建备份的库
sys_restore 可以通过 -C 来自动创建库,但创建的库并不是 -d 指定的库,而是 sys_dump 导出的库。比如使用 sys_dump 导出 db1 库的数据:
如上图,使用 sys_dump 备份 db1 的数据,然后使用 sys_restore 连接 db2 还原数据,直接报错。这是因为使用 -C 会自动创建库,创建的库并不是 -d 指定的 db2,而是 db1。因为原本的 db1 存在,且数据都有,所以会直接报错。
删除 db1 库后再次还原数据
可以看到删除 db1 后是可以正常还原的,也就是说这种方法仅适用数据迁移。
更多推荐
所有评论(0)