Gaussdb数据库备份与恢复

一、GaussDB介绍
GaussDB 是华为自主创新研发的分布式关系型数据库,属于华为云数据库产品。‌具备高可用、高性能、高安全、高弹性、高智能、易部署、易迁移等关键能力,是企业核心业务数字化转型升级的坚实数据底座。
二、命令介绍
在 Linux 命令行下,使用 gs_dump 命令备份当前库的所有表(即整库逻辑备份),gsql是纯文本SQL脚本。
三、基本语法与示例
1. gs_dump 命令
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 表名 ... 来指定恢复指定的表。

posted @ 2026-08-27 16:13  拼搏进取吧  阅读(6)  评论(0)    收藏  举报