一文教你使用gs_dump导出数据
时间:2023-01-25 11:00:01
背景信息
gs_dump是openGauss用于导出数据库相关信息的工具,除回收站对象外,用户可以定制导出数据库或对象(模式、表、视图等)。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。
gs_dump操作系统用户使用工具omm执行。
gs_dump其他用户可以访问他用户可以访问该工具openGauss数据库(读写)。
gs_dump工具支持导出完全一致的数据。T1时刻启动gs_dump导出A数据库,导出数据结果将是TA数据库的数据状态,TA数据库的修改不会在一刻后导出。
gs_dump生成列不会转储。
gs_dump支持导出兼容性v1版本数据库的文本格式文件。
gs_dump支持将数据库信息导出到纯文本格式SQL在脚本文件或其他归档文件中。
- 纯文本格式SQL脚本文件:将数据库恢复到保存状态所需SQL语句。通过gsql运行该SQL脚本文件可以恢复数据库。即使在其他主机和其他数据库产品中,只要是SQL稍加修改脚本文件,也可用于重建数据库。
- 归档格式文件:包括将数据库恢复到保存状态所需的数据tar格式、目录归档格式或自定义归档格式,详见表1。导出结果必须与gs_restore配合使用恢复数据库,gs_restore导入工具时,系统允许用户选择需要导入的内容,甚至在导入前对等待导入的内容进行排序。
主要功能
gs_dump通过创建四种不同的导出文件格式[-F或者–format=]选项指定,如表1所示。
表 1导出文件格式
包含纯文本脚本文件SQL句子和命令。命令可以由gsql重建数据库对象并加载表数据,执行命令行终端程序。 |
使用gsql在工具恢复数据库对象之前,可以使用文本编辑器编辑纯文本导出文件。 |
|||
使用gs_restore可选择从自定义归档导出文件中导入相应的数据库对象。 |
||||
tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单独表大小应小于8GB。 |
说明: 可以使用gs_dump程序将文件压缩为目录归档或自定义归档导出文件,减少导出文件的大小。生成目录归档或自定义归档导出文件时,默认进行中等级别的压缩。gs_dump程序无法压缩已归档导出文件。
注意事项
-
禁止修改导出的文件和内容,否则可能无法恢复成功。
-
为了保证数据一致性和完整性,gs_dump会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs_dump会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定–lock-wait-timeout选项,自定义等待锁超时时间。
-
不支持加密导出存储过程和函数。
语法
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
常用参数说明
表 1 常用参数说明
示例
使用gs_dump转储数据库为SQL文本文件或其它格式的操作,如下所示。
示例中“Bigdata@123”表示数据库用户密码;“backup/MPPDB_backup.sql”表示导出的文件,其中backup表示相对于当前目录的相对目录;“37300”表示数据库服务器端口;“postgres”表示要访问的数据库名。
说明: 导出操作时,请确保该目录存在并且当前的操作系统用户对其具有读写权限。
示例1:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.sql文件格式为纯文本格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.sql -p 37300 postgres -F p
gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: The total objects number is 356.
gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: [100.00%] 356 objects have been dumped.
gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: dump database postgres successfully
gs_dump[port='37300'][postgres][2018-06-27 09:49:17]: total time: 1274 ms
使用gsql程序从纯文本导出文件中导入数据。
示例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
gs_dump[port='37300'][postgres][2018-06-27 10:02:24]: The total objects number is 1369.
gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: [100.00%] 1369 objects have been dumped.
gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: dump database postgres successfully
gs_dump[port='37300'][postgres][2018-06-27 10:02:53]: total time: 50086 ms
示例3:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.dmp文件格式为自定义归档格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup.dmp -p 37300 postgres -F c
gs_dump[port='37300'][postgres][2018-06-27 10:05:40]: The total objects number is 1369.
gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: [100.00%] 1369 objects have been dumped.
gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: dump database postgres successfully
gs_dump[port='37300'][postgres][2018-06-27 10:06:03]: total time: 36620 ms
示例4:执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup文件格式为目录格式。
gs_dump -U omm -W Bigdata@123 -f backup/MPPDB_backup -p 37300 postgres -F d
gs_dump[port='37300'][postgres][2018-06-27 10:16:04]: The total objects number is 1369.
gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: [100.00%] 1369 objects have been dumped.
gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: dump database postgres successfully
gs_dump[port='37300'][postgres][2018-06-27 10:16:23]: total time: 33977 ms
示例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
gs_dump[port='37300'][postgres][2018-06-27 10:37:01]: The total objects number is 1367.
gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: [100.00%] 1367 objects have been dumped.
gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: dump database postgres successfully
gs_dump[port='37300'][postgres][2018-06-27 10:37:22]: total time: 37017 ms
示例6:执行gs_dump,仅导出依赖于指定表testtable的视图信息。然后创建新的testtable表,再恢复依赖其上的视图。
-
备份仅依赖于testtable的视图。
gs_dump -s -p 37300 postgres -t PUBLIC.testtable --include-depend-objs --exclude-self -f backup/MPPDB_backup.sql -F p gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: The total objects number is 331. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: [100.00%] 331 objects have been dumped. gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: dump database postgres successfully gs_dump[port='37300'][postgres][2018-06-15 14:12:54]: total time: 327 ms
-
修改testtable名称。
gsql -p 37300 postgres -r -c "ALTER TABLE PUBLIC.testtable RENAME TO testtable_bak;"
-
创建新的testtable表。
CREATE TABLE PUBLIC.testtable(a int, b int, c int);
-
还原依赖于testtable的视图。
gsql -p 37300 postgres -r -f backup/MPPDB_backup.sql