Gaussdb数据库备份与恢复
gs_dump 命令备份当前库的所有表(即整库逻辑备份),gsql是纯文本SQL脚本。gs_dump -p {port} -U {username} -W {password} -h {ip} -d {databases} -F c -f /tmp/hsort_cloud_all.dmp
参数解释:
-d hsort_cloud: 指定当前要备份的数据库。
-F c: 指定输出为自定义归档格式(压缩格式,需要配合 gs_restore 恢复)。
-f /tmp/hsort_cloud_all.dmp: 指定备份文件保存的绝对路径和文件名。
示例
gs_dump -p 8000 -U root -W XXX -h 127.0.0.1 -d hsort_cloud -F c -f /tmp/hsort_cloud_20260827.dmp
如果报错
[root@vm-123~]#gs_dump -p 8000 -U root -W XXX -h 127.0.0.1 -d hsort_cloud -F c -f /tmp/hsort_cloud_20260827.dmp /usr/bin/gs_dump_exec: invalid option -- 'd' Try "gs_dump --help" for more information. [root@vm-123~]#
请执行
gs_dump -p 8000 -U root -W XXX -h 127.0.0.1 -F c -f /tmp/hsort_cloud_20260827.dmp hsort_cloud或 gs_dump -p 8000 -U root -h 127.0.0.1 -F c -f /tmp/hsort_cloud_20260827.dmp hsort_cloud
2.gsql命令
gs_dump -p {port} -U {username} -W {password} -h {ip} -d {databases} -F p -f /tmp/hsort_cloud_20260827.sql
参数解释:
-F p 表示纯文本格式,生成的文件里都是建表和插入数据的 SQL 语句。
示例
gs_dump -p 8000 -U root -W XXX -h 127.0.0.1 -d hsort_cloud -F p -f /tmp/hsort_cloud_20260827.sql gs_dump -p 8000 -U root -W XXX -h 127.0.0.1 -F p -f /tmp/hsort_cloud_20260827.sql hsort_cloud
四、数据恢复
1.恢复 .dmp 文件使用 gs_restore
步骤 1:创建一个新的空数据库
假设你要恢复到 [hsort_cloud5]这个库里。先在终端输入以下命令(连接到默认的 postgres 库去创建):
gsql -p 8000 -U root -h 127.0.0.1 -d postgres -c "CREATE DATABASE hsort_cloud5;"
(提示:输入密码 XXX)
步骤 2:使用 gs_restore 恢复
退出当前 gsql(如果有的话),然后执行:
gs_restore -p 8000 -U root -h 127.0.0.1 -d hsort_cloud5 /tmp/hsort_cloud_20260827.dmp
参数解释:-d 指定目标数据库名,最后直接跟 .dmp 文件路径。没有加 -W 参数,系统会提示你输入密码(推荐这种方式)
💡 进阶参数(可选):
如果你在恢复 .dmp 时报错(例如因为扩展或权限问题),可以加上 --exit-on-error 让它在遇到第一个错误时停止,方便排查;或者加上 -j 4 使用 4 个线程并行恢复,速度会更快:
gs_restore -p 8000 -U root -h 127.0.0.1 -d hsort_cloud_restore -j 4 /tmp/hsort_cloud_20260827.dmp
结果验证:
恢复完成后,你可以登录 hsort_cloud5 查看表是否齐全:
gsql -p 8000 -U root -h 127.0.0.1 -d hsort_cloud5
进入后输入 \dt 查看列表,确认无误后输入 \q 退出。
2.恢复 .sql 文件使用 gsql
注意:因为 .sql 文件里包含了 CREATE TABLE 的指令,你不能直接将其导入到一个已经有同名表存在的数据库中。需要先准备好一个空库。
步骤 1:创建一个新的空数据库
和上面一样,先建一个新库:
gsql -p 8000 -U root -h 127.0.0.1 -d postgres -c "CREATE DATABASE hsort_cloud6;"
步骤 2:使用 gsql 导入 SQL 文件
直接使用 -f 参数指向该 SQL 文件:
gsql -p 8000 -U root -h 127.0.0.1 -d hsort_cloud6 -f /tmp/hsort_cloud_20260827.sql
(输入密码后,屏幕会快速滚动大量 CREATE TABLE、INSERT 0 1 等执行成功的提示)
参数解释:这个命令会将 SQL 文件里的所有建表和插数语句按顺序执行。执行过程中屏幕会滚动很多 CREATE TABLE、INSERT 0 1 之类的输出,最终没有报错(没有 ERROR)即视为成功。
结果验证:
同样登录 hsort_cloud6 查看:
gsql -p 8000 -U root -h 127.0.0.1 -d hsort_cloud6
输入 \dt 查看表列表确认。
核心总结
1、工具不要混淆:gs_restore 只能处理 .dmp;gsql -f 只能处理 .sql。用错了会直接报语法错误。
2、关于密码:我上面的命令特意去掉了 -W XXX,因为直接把密码写在命令行容易泄露且可能引发特殊字符转义问题。执行命令后系统会提示 Password:,你手输密码按回车即可,这是最安全的做法。
3、关于目标库:恢复前必须确保目标库是全新的空库。如果库里已经有同名的表,恢复时会报错“表已存在”,或者因为数据冲突导致恢复失败。如果想覆盖旧数据,通常需要先 DROP DATABASE 旧库,再重新创建一个空的。
4、部分恢复:如果你只想恢复 .dmp 里的某几张特定的表,可以使用 gs_restore -t 表名 ... 来指定恢复指定的表。

浙公网安备 33010602011771号