一、概述
gs_dump是一款用于导出数据库相关信息的工具,支持导出完整一致的数据库对象(数据库、模式、表、视图等)数据,同时不影响用户对数据库的正常访问。
二、工具
1、特点
gs_dump是openGauss用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。
gs_dump工具由安装openGauss数据库的操作系统用户执行。
gs_dump工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。
gs_dump工具支持导出完整一致的数据。例如,T1时刻启动gs_dump导出A数据库,那么导出数据结果将会是T1时刻A数据库的数据状态,T1时刻之后对A数据库的修改不会被导出。
gs_dump工具在进行数据导出时生成的列不会被转储。
gs_dump支持导出兼容v1版本数据库的文本格式文件。
gs_dump支持将数据库信息导出至纯文本格式的SQL脚本文件或其他归档文件中。
- 纯文本格式的SQL脚本文件:包含将数据库恢复为其保存时的状态所需的SQL语句。通过gsql运行该SQL脚本文件,可以恢复数据库。即使在其他主机和其他数据库产品上,只要对SQL脚本文件稍作修改,也可以用来重建数据库。
- 归档格式文件:包含将数据库恢复为其保存时的状态所需的数据,可以是tar格式、目录归档格式或自定义归档格式,详见表1。该导出结果必须与gs_restore配合使用来恢复数据库,gs_restore工具在导入时,系统允许用户选择需要导入的内容,甚至可以在导入之前对等待导入的内容进行排序。
2、主要功能
gs_dump可以创建四种不同的导出文件格式,通过“-F”或者“--format=”选项指定,具体如所示。
表 1 导出文件格式
格式名称 |
-F的参数值 |
说明 |
建议 |
对应导入工具 |
纯文本格式 |
p |
纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。 |
小型数据库,一般推荐纯文本格式。 |
使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。 |
自定义归档格式 |
c |
一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 |
中型或大型数据库,推荐自定义归档格式。 |
使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。 |
目录归档格式 |
d |
该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。 |
- |
|
tar归档格式 |
t |
tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。 |
- |
说明: 可以使用gs_dump程序将文件压缩为目录归档或自定义归档导出文件,减少导出文件的大小。生成目录归档或自定义归档导出文件时,默认进行中等级别的压缩。gs_dump程序无法压缩已归档导出文件。
注意事项
- 禁止修改-F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于-F p 格式导出的文件,如有需要,可根据需要谨慎编辑导出文件。
- 为了保证数据一致性和完整性,gs_dump会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定--lock-wait-timeout选项,自定义等待锁超时时间。
- 不支持加密导出存储过程和函数。
3、语法
gs_dump [OPTION]... [DBNAME]
说明: “DBNAME”前面不需要加短或长选项。“DBNAME”指定要连接的数据库。 例如: 不需要-d,直接指定“DBNAME”。
gs_dump -p port_number postgres -f dump1.sql
或者
export PGDATABASE=postgres
gs_dump -p port_number -f dump1.sql
环境变量: PGDATABASE
参数说明
通用参数:
-f, --file=FILENAME
将输出发送至指定文件或目录。如果省略该参数,则使用标准输出。如果输出格式为(-F c/-F d/-F t)时,必须指定-f参数。如果-f的参数值含有
目录,要求当前用户对该目录具有读写权限,并且不能指定已有目录。
-F, --format=c|d|t|p
选择输出格式。格式如下:
p|plain:输出一个文本SQL脚本文件(默认)。
c|custom:输出一个自定义格式的归档,并且以目录形式输出,作为gs_restore输入信息。该格式是最灵活的输出格式,因为能手动选择,而且能在恢复过程中将归档项重新排序。该格式默认状态下会被压缩。
d|directory:该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。
t|tar:输出一个tar格式的归档形式,作为gs_restore输入信息。tar格式与目录格式兼容;tar格式归档形式在提取过程中会生成一个有效的目录
格式归档形式。但是,tar格式不支持压缩且对于单独表有8GB的大小限制。此外,表数据项的相应排序在恢复过程中不能更改。
-Z, --compress=0-9
指定使用的压缩比级别。
取值范围:0~9
0表示无压缩。
1表示压缩比最小,处理速度最快。
9表示压缩比最大,处理速度最慢。
针对自定义归档格式,该选项指定单个表数据片段的压缩,默认方式是以中等级别进行压缩。纯文本格式或tar归档格式目前不支持压缩。
--lock-wait-timeout=TIMEOUT
请勿在转储刚开始时一直等待以获取共享表锁。如果无法在指定时间内锁定某个表,就选择失败。可以以任何符合SET statement_timeout的格式指定超时时间。
转储参数:
-a, --data-only
只输出数据,不输出模式(数据定义)。转储表数据、大对象和序列值。
-c, --clean
在将创建数据库对象的指令输出到备份文件之前,先将清理(删除)数据库对象的指令输出到备份文件中。(如果目标数据库中没有任何对象,
gs_restore工具可能会输出一些提示性的错误信息)
该选项只对文本格式有意义。针对归档格式,可以调用gs_restore时指定选项。
-C, --create
备份文件以创建数据库和连接到创建的数据库的命令开始。(如果命令脚本是这种方式执行,可以先指定任意数据库用于执行创建数据库的命令,数据
不会恢复到指定的数据库中,而是恢复到创建的数据库中。)
该选项只对文本格式有意义。针对归档格式,可以在调用gs_restore时指定选项。
-E, --encoding=ENCODING
以指定的字符集编码创建转储。默认情况下,以数据库编码创建转储。(得到相同结果的另一个办法是将环境变量“PGCLIENTENCODING”设置为所需的转储编码。)
-n, --schema=SCHEMA
只转储与模式名称匹配的模式,此选项包括模式本身和所有它包含的对象。如果该选项没有指定,所有在目标数据库中的非系统模式将会被转储。写入
多个-n选项来选择多个模式。此外,根据gsql的\d命令所使用的相同规则,模式参数可被理解成一个pattern,所以多个模式也可以通过在该
pattern中写入通配符来选择。使用通配符时,注意给pattern打引号,防止shell扩展通配符。
说明:
当-n已指定时,gs_dump不会转储已选模式所附着的任何其他数据库对象。因此,无法保证某个指定模式的转储结果能够自行成功地储存到一个空数据
库中。
当-n指定时,非模式对象不会被转储。
转储支持多个模式的转储。多次输入-n schemaname转储多个模式。
例如:
gs_dump -h host_name -p port_number postgres -f backup/bkp_shl2.sql -n sch1 -n sch2
-N与-n参数相反,不转储任何与模式pattern匹配的模式。
-s, --schema-only
只转储对象定义(模式),而非数据。
4、示例
导出操作时,请确保该目录存在并且当前的操作系统用户对其具有读写权限。
示例1:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.sql文件格式为纯文本格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.sql -p 37300 postgres -F p
示例2:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.tar文件格式为tar格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.tar -p 37300 postgres -F t
示例3:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.dmp文件格式为自定义归档格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.dmp -p 37300 postgres -F c
示例4:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup文件格式为目录格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup -p 37300 postgres -F d
示例5:执行gs_dump,导出postgres数据库信息,但不导出/home/MPPDB_temp.sql中指定的表信息。导出的MPPDB_backup.sql文件格式为纯文本格式。
gs_dump -U omm -W Bigdata@123 -p 37300 postgres --exclude-table-file=/home/MPPDB_temp.sql -f backup/MPPDB_backup.sql
-c、-C和不加的区别
gs_dump -U joe -W Mysql@123456 -f db_test_c.sql -p 26000 db_test -c -F t #先删后建if exists
gs_dump -U joe -W Mysql@123456 -f db_test_C.sql -p 26000 db_test -C -F t #只建
gs_dump -U joe -W Mysql@123456 -f db_test.sql -p 26000 db_test -F t #先删后建if exists
所以-c\-C没变要添加