openGauss逻辑备份恢复工具gs_dump/gs_restore
gs_dump
- gs_dump是openGauss用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),回收站对象除外。
- gs_dump工具由操作系统用户omm执行。
- gs_dump工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。
- gs_dump工具支持导出完整一致的数据。例如,T1时刻启动gs_dump导出A数据库,那么导出数据结果将会是T1时刻A数据库的数据状态,T1时刻之后对A数据库的修改不会被导出。
- gs_dump可以创建四种不同的导出文件格式,通过[-F或者–format=]选项指定,具体如表1所示。
表 1 导出文件格式
格式名称 | -F的参数值 | 说明 | 建议 | 对应导入工具 |
---|---|---|---|---|
纯文本格式 | p | 纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。 | 小型数据库,一般推荐纯文本格式。 | 使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。 |
自定义归档格式 | c | 一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 | 中型或大型数据库,推荐自定义归档格式。 | 使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。 |
目录归档格式 | d | 该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。 | - | |
tar归档格式 | t | tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。 | - |
说明:
可以使用gs_dump程序将文件压缩为目录归档或自定义归档导出文件,减少导出文件的大小。生成目录归档或自定义归档导出文件时,默认进行中等级别的压缩。gs_dump程序无法压缩已归档导出文件。
选项说明
[omm@openGauss01 ~]$ gs_dump --help
gs_dump 将数据库转储为文本文件或其他格式。用法:gs_dump [选项]... [数据库名]连接选项:-h, --host=HOSTNAME 数据库服务器主机或套接字目录-p, --port=PORT 数据库服务器端口号-U, --username=NAME 以指定数据库用户连接-w, --no-password 不提示输入密码-W, --password=PASSWORD 指定数据库用户的密码--role=ROLENAME 转储前执行SET ROLE--rolepassword=ROLEPASSWORD 角色的密码通用选项:-f, --file=FILENAME 输出文件或目录名称-F, --format=c|d|t|p 输出文件格式(custom, directory, tar, plain text(默认))-v, --verbose 详细模式-V, --version 输出版本信息后退出-Z, --compress=0-9 custom格式的压缩级别--lock-wait-timeout=TIMEOUT 等待表锁超时后失败-?, --help 显示此帮助信息后退出控制输出内容的选项:-a, --data-only 仅转储数据,不转储模式-b, --blobs 包含大对象数据-c, --clean 在重建前清除(删除)数据库对象-C, --create 在转储中包含创建数据库的命令-E, --encoding=ENCODING 以指定编码转储数据-g, --exclude-guc=GUC_PARAM 不转储指定的GUC参数设置-n, --schema=SCHEMA 仅转储指定模式-N, --exclude-schema=SCHEMA 不转储指定模式-o, --oids 在转储中包含OID-O, --no-owner 在纯文本格式中跳过对象所有权恢复-s, --schema-only 仅转储模式,不转储数据-q, --target=VERSION 转储数据格式兼容的GaussDB版本(v1或...)-S, --sysadmin=NAME 纯文本格式中使用的系统管理员用户名-t, --table=TABLE 仅转储指定表-T, --exclude-table=TABLE 不转储指定表--include-table-file=FileName 仅转储文件中列出的表--exclude-table-file=FileName 不转储文件中列出的表--pipeline 使用管道传递密码(禁止在终端使用)-x, --no-privileges/--no-acl 不转储权限(grant/revoke)--column-inserts/--attribute-inserts 以带列名的INSERT命令格式转储数据--disable-dollar-quoting 禁用美元符号引用,使用SQL标准引用--disable-triggers 在仅数据恢复期间禁用触发器--exclude-table-data=TABLE 不转储指定表的数据--exclude-with 不转储表的WITH()子句--inserts 以INSERT命令而非COPY格式转储数据--no-publications 不转储发布--no-security-labels 不转储安全标签分配--no-subscriptions 不转储订阅--no-tablespaces 不转储表空间分配--no-unlogged-table-data 不转储未记录日志的表数据--include-alter-table 转储表的删除列操作--quote-all-identifiers 引用所有标识符(即使非关键字)--section=SECTION 转储指定段落(pre-data, data或post-data)--serializable-deferrable 等待直到转储可无异常执行--dont-overwrite-file 不覆盖现有文件(针对纯文本、tar和自定义格式)--use-set-session-authorization 使用SET SESSION AUTHORIZATION命令而非ALTER OWNER命令设置所有权--exclude-function 不转储函数和存储过程--gen-key 若无可用密钥,可设置此选项生成密钥并加密转储数据以供后续使用--include-extensions 在转储中包含扩展--binary-upgrade 仅限升级工具使用--binary-upgrade-usermap="USER1=USER2" 仅限升级工具用于用户名映射--non-lock-table 仅限OM工具使用--include-depend-objs 转储依赖于输入对象的对象--exclude-self 不转储输入对象本身
示例
示例1:执行gs_dump,导出postgres数据库全量信息,导出的postgres.sql文件格式为纯文本格式。
# 在恢复前清除数据库对象(删除索引、表、序列等)
[omm@openGauss01 ~]$ gs_dump -h localhost -p 15400 -U omm -W Wl123456# postgres -F p --clean -f /data/backup/postgres.sql
# 直接恢复数据,如果库内存在相同内容会报错
[omm@openGauss01 ~]$ gs_dump -h localhost -p 15400 -U omm -W Wl123456# postgres -F p -f /data/backup/postgres.sql
示例2:执行gs_dump,导出postgres数据库全量信息,导出的postgres.tar文件格式为tar格式。
[omm@openGauss01 ~]$ gs_dump -h localhost -p 15400 -U omm -W Wl123456# postgres -F t -f /data/backup/postgres.tar
示例3:执行gs_dump,导出postgres数据库全量信息,导出的postgres.dmp文件格式为自定义归档格式。
[omm@openGauss01 ~]$ gs_dump -h localhost -p 15400 -U omm -W Wl123456# postgres -F c --clean -f /data/backup/postgres.dmp
示例4:执行gs_dump,只导出postgres数据库中的public模式中的sbtest1表
gs_dump -h localhost -p 15400 -U omm -W Wl123456# postgres -F c \
--schema=public --table=sbtest1 \
-f /data/backup/postgres_public_sbtest1.dmp
gs_restore
- gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。
- gs_restore工具由操作系统用户omm执行。
- gs_restore工具目前支持进度打印,会根据已经恢复的对象数比上需要恢复的总对象数打印进度。
选项说明
gs_restore 用于从 gs_dump 创建的归档文件中恢复 openGauss 数据库。[基本用法]gs_restore [选项]... 备份文件[通用选项]-d, --dbname=数据库名 指定要恢复到的目标数据库名称-f, --file=文件名 将恢复内容输出到指定文件(默认为标准输出)-F, --format=格式 指定备份文件格式(c=自定义/d=目录/t=tar,通常自动识别)-l, --list 列出备份文件中的内容概要(不实际执行恢复)-v, --verbose 显示详细的恢复过程信息-V, --version 显示版本信息后退出-?, --help 显示本帮助信息[恢复控制选项]-a, --data-only 仅恢复数据,不恢复表结构等元数据-c, --clean 恢复前先删除数据库中已存在的对象-C, --create 恢复时自动创建目标数据库-e, --exit-on-error 遇到错误时立即退出(默认会继续)-I, --index=索引名 仅恢复指定的索引-j, --jobs=数量 使用多线程并行恢复(加快大数据库恢复速度)-L, --use-list=文件 按照指定文件中的列表顺序恢复对象-n, --schema=模式名 仅恢复指定模式下的对象-O, --no-owner 不恢复对象的所有权信息-P, --function=函数名 仅恢复指定的函数-s, --schema-only 仅恢复数据库结构,不恢复实际数据-S, --sysadmin=用户名 指定用于禁用触发器的管理员账号-t, --table=表名 仅恢复指定的表-T, --trigger=触发器名 仅恢复指定的触发器-x, --no-privileges 不恢复权限设置(Grant/Revoke)-1, --single-transaction 在单个事务中执行恢复[连接选项]-h, --host=主机名 数据库服务器地址-p, --port=端口号 数据库服务器端口-U, --username=用户名 连接数据库的用户名-w, --no-password 不提示输入密码-W, --password=密码 指定连接密码--role=角色名 恢复前先切换到指定角色--rolepassword=角色密码 指定角色的密码[加密选项]--with-decryption=类型 指定解密算法类型--with-key=密钥 指定解密密钥(Base64编码)--with-salt=盐值 指定解密盐值(16字节)[其他选项]--disable-triggers 在数据恢复期间禁用触发器--no-data-for-failed-tables 跳过创建失败表的数据恢复--no-tablespaces 不恢复表空间信息--section=部分 指定恢复的部分(pre-data/data/post-data)--pipeline 使用管道传递密码(禁止在终端使用)
示例
示例1:执行gsql程序,恢复(纯文本格式)纯文本格式 的sql文件到postgres数据库
gsql -h localhost -p 15400 -U omm -W Wl123456# -d postgres -f /data/backup/postgres.sql
示例2:执行gs_restore,将导出的dmp文件(自定义归档格式)导入到postgres数据库。
gs_restore -h localhost -p 15400 -U omm -W Wl123456# -d postgres /data/backup/postgres.dmp --clean --jobs=8
示例3:执行gs_restore,只导入某表
gs_restore -h localhost -p 15400 -U omm -W Wl123456# -d postgres /data/backup/postgres.dmp --clean --jobs=8 --schema=public --table=sbtest1