数据库版本:KingbaseES V008R006C008B0014


        

简介

介绍2个KingbaseES用于备份还原的工具:

  • sys_dump:逻辑备份
  • sys_restore:逻辑还原

    sys_dump 是 KingbaseES 用于逻辑备份的工具,可以将数据备份为不同类型的文件。支持数据库正在运行时备份,且不阻塞其他用户访问数据库。sys_dump 只用于备份单个数据库,如果要备份整个集簇需要使用 sys_dumpall(备份所有对象,包括角色、表空间,使用方法与sys_dump相同)。

    sys_restore 则是将 sys_dump 备份的文件还原到数据库中,它们的连接参数都是相同的,控制参数存在些许区别。

        

文章目录如下

1. 语法参数

1.1. 通用连接参数

1.2. 逻辑备份参数

1.3. 逻辑还原参数

2. 逻辑备份方法

2.1. 导出数据为sql文件

2.2. 自定义导出文件格式

2.3. 快速导出(并行)

2.4. 指定导出某些表

3. 逻辑还原方法

3.1. 指定某个库导入数据

3.2. 还原时自动创建备份的库


        

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 后是可以正常还原的,也就是说这种方法仅适用数据迁移。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐