更新时间:2024-03-06 GMT+08:00

概述

GaussDB(DWS)提供的gs_dump和gs_dumpall工具,能够帮助用户导出需要的数据库对象或其相关信息。通过导入工具将导出的元数据信息导入至需要的数据库,可以完成数据库信息的迁移。gs_dump支持导出单个数据库或其内的对象,而gs_dumpall支持导出集群中所有数据库或各库的公共全局对象。详细的使用场景见表1

表1 适用场景

适用场景

支持的导出粒度

支持的导出格式

配套的导入方法

导出单个数据库

数据库级导出

  • 导出全量信息。

    使用导出的全量信息可以创建一个与当前库相同的数据库,且库中数据也与当前库相同。

  • 仅导出库中所有对象的定义,包含库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。

    使用导出的对象定义,可以快速创建一个相同的数据库,但是库中并无原数据库的数据。

  • 仅导出数据。
  • 纯文本格式
  • 自定义归档格式
  • 目录归档格式
  • tar归档格式

模式级导出

  • 导出模式的全量信息。
  • 仅导出模式中数据。
  • 仅导出对象的定义,包含表定义、存储过程定义和索引定义等。
表级导出
  • 导出表的全量信息。
  • 仅导出表中数据。
  • 仅导出表的定义。

导出所有数据库

数据库级导出

  • 导出全量信息。

    使用导出的全量信息可以创建与当前集群相同的一个集群,拥有相同数据库和公共全局对象,且库中数据也与当前各库相同。

  • 仅导出各数据库中的对象定义,包含表空间、库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。

    使用导出的对象定义,可以快速创建与当前集群相同的一个集群,拥有相同的数据库和表空间,但是库中并无原数据库的数据。

  • 仅导出数据。

纯文本格式

数据文件导入请参见使用gsql元命令\COPY导入数据

各库公共全局对象导出
  • 仅导出表空间信息。
  • 仅导出角色信息。
  • 导出角色与表空间。

gs_dump和gs_dumpall通过-U指定执行导出的用户账户。如果当前使用的账户不具备导出所要求的权限时,会无法导出数据。此时,可在导出命令中设置--role参数来指定具备权限的角色。在执行命令后,gs_dump和gs_dumpall会使用--role参数指定的角色,完成导出动作。可使用该功能的场景请参见表1,详细操作请参见无权限角色导出数据

gs_dump和gs_dumpall通过对导出的数据文件加密,导入时对加密的数据文件进行解密,可以防止数据信息泄露,为数据库的安全提供保证。

gs_dump和gs_dumpall工具在进行数据导出时,其他用户可以访问集群数据库(读或写)。

gs_dump和gs_dumpall工具支持导出完整一致的数据。例如,T1时刻启动gs_dump导出A数据库,或者启动gs_dumpall导出整个集群数据库,那么导出数据结果将会是T1时刻A数据库或者该集群数据库的数据状态,T1时刻之后对A数据库或集群数据库的修改不会被导出。

gs_dump和gs_dumpall工具是通过“gsql命令行客户端”软件包解压缩获取。

注意事项

  • 禁止修改导出的文件和内容,否则可能无法恢复成功。
  • 为了保证数据一致性和完整性,导出工具会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump和gs_dumpall会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定--lock-wait-timeout选项,自定义等待锁超时时间。
  • 由于gs_dumpall读取所有数据库中的表,因此必须以数据库集群管理员身份进行连接,才能导出完整文件。在使用gsql执行脚本文件导入时,同样需要管理员权限,以便添加用户和组,以及创建数据库。
  • 由于GaussDB(DWS)数据库所有视图的定义都默认带有表名或别名的前缀(即tab.col的形式),因此可能与原始定义不符,导致在极少的场景下会发生重建视图字段对应基表不准确而报错的情况。为避免此情况建议在导出视图定义时,设置guc参数behavior_compat_options='compat_display_ref_table',使导出定义与原始语句一致。