更新时间:2025-05-29 GMT+08:00

数据库级导入导出

gs_dump工具可以对单个数据库进行备份,支持四种不同的使用归档格式,不同的归档格式适用场景如表1所示,用户可以根据自身适用情况选择合适的归档格式。

gs_dump工具请参考《工具参考》中“数据导入导出工具 > gs_dump导出数据库信息”。

表1 导出文件格式

格式名称

-F的参数值

说明

建议

对应导入工具

纯文本归档格式

p

纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。

小型数据库,或者需要对导出的sql文件进行修改,推荐纯文本格式。

使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。

gsql工具请参考《工具参考》中“数据库连接工具 > gsql连接数据库 > gsql使用指导”。

自定义归档格式

c

一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。

中型或大型数据库,需要将备份结果输出到单个文件中,推荐自定义归档格式。

使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。gs_restore工具请参考《工具参考》中“数据导入导出工具 > gs_restore导入数据”。

目录归档格式

d

该格式会创建一个目录,该目录包含两类文件,一类是包含数据库对象的目录文件,另一类是每个表和blob对象对应的数据文件。

中型或大型数据库,需要将数据库对象与数据分目录存储导出,推荐使用目录归档格式。

tar归档格式

t

tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且单个文件大小应小于8GB。

小型数据库,需要将归档结果导出并打包,可以使用tar归档格式。

  • gs_dump不会对所有数据库公共的全局对象(角色、表空间及对应权限)进行备份。因此恢复时请确保目标库/新实例上的全局对象已经创建。gs_dumpall的-g命令可以导出全局对象,同时使用gsql在目标端进行全局对象的导入。gs_dumpall工具请参考《工具参考》中“数据导入导出工具 > gs_dumpall导出所有数据库信息”。
  • gs_dump和gs_restore不支持跨数据库兼容模式的导入导出,请确保源库与目标库的数据库兼容模式(兼容模式的查询与创建指定兼容模式的数据库请参见CREATE DATABASE)及兼容性配置参数保持一致。
  • 禁止修改-F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于-F p 格式导出的文件,如有需要修改替换,可根据需要谨慎编辑导出文件。
  • 恢复后,建议在数据库上运行ANALYZE,为优化器提供有用的统计数据信息。
备份时推荐以初始用户或具备sysadmin权限的用户执行如下命令,源库为my_database,导出时包含数据和对象定义。
-- 纯文本归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_database_backup.sql > /data/backup/my_database_backup.log &
-- 自定义归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F c -f /data/backup/my_database_backup.dmp > /data/backup/my_database_backup.log &
-- 目录归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F d -f /data/backup/my_database_backup > /data/backup/my_database_backup.log &
-- tar归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F t -f /data/backup/my_database_backup.tar > /data/backup/my_database_backup.log &
恢复时需要先创建好与源库属性相同的目标库,且库内没有任何内容。
-- 通过以下gsql元命令,查看数据库属性信息
\l+
-- 根据查询到的属性信息,创建目标数据库
create database my_database2 encoding='xxxxx' LC_COLLATE='xxxxx' LC_CTYPE ='xxxxx' TEMPLATE=xxx DBCOMPATIBILITY 'xxx';
再以初始用户或具备sysadmin权限的用户执行如下命令进行恢复。
-- 纯文本归档格式
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_database_backup.sql -a > /data/backup/my_database_restore.log &
-- 自定义归档格式
nohup gs_restore /data/backup/my_database_backup.dmp -d my_database2 -p 8000 -U root -W ******** -F c -v > /data/backup/my_database_restore.log &
-- 目录归档格式
nohup gs_restore /data/backup/my_database_backup -d my_database2 -p 8000 -U root -W ******** -F d -v > /data/backup/my_database_restore.log &
-- tar归档格式
nohup gs_restore /data/backup/my_database_backup.tar -d my_database2 -p 8000 -U root -W ******** -F t -v > /data/backup/my_database_restore.log &