灌水唠嗑区
每日一题
问答

关于备份的问题思考

发表于2026-06-02 13:54:1128次浏览12个评论

作为GBase 8c的DBA,需要执行一次对 postgres 数据库中 sales 模式的逻辑备份,以便迁移到新的测试环境。该模式下有一个名为 orders 的表,数据量约为1GB。

你首先使用以下命令尝试生成一个纯文本格式的备份文件:

gs_dump -U gbase -W Gbase_123 -f /backup/sales_backup.sql -p 5432 postgres -n sales -F p

假设磁盘 /backup 目录空间非常有限,仅有500MB。

问题:

  1. 上述纯文本格式(-F p)的备份文件可能会非常大,存在磁盘空间不足的风险。除了使用纯文本格式,GBase 8c的 gs_dump 还支持哪三种其他备份格式?
  2. 针对你磁盘空间有限且备份文件较大的情况,你应该选择哪一种备份格式,以便在后续恢复时获得最好的灵活性(例如,可以选择只恢复 orders 这一张表)?
  3. 如果后续需要在新的测试环境中恢复这个备份,你应该使用 gsql 命令还是 gs_restore 命令?为什么?

     

悬赏:2000吉币
回答被发帖人采纳后可获得赏金

评论

登录后才可以发表评论
用户头像
山佳发表于 2个月前
1. 其他支持的备份格式
除了纯文本格式(-F p),gs_dump 还支持以下三种逻辑备份格式:

自定义归档格式 (-F c)
目录归档格式 (-F d)
tar归档格式 (-F t)

2. 最适合的备份格式选择
最适合的格式是自定义归档格式 (-F c)。
解析: 自定义归档格式(-F c)支持压缩,生成的备份文件体积通常远小于纯文本格式,可以有效应对磁盘空间不足的问题。同时,它具有很高的灵活性,在恢复时可以使用 gs_restore 工具,只从中提取并恢复特定的对象(如 sales.orders 这张表),而不需要恢复整个模式。而纯文本格式和tar归档格式不具备这种灵活的恢复能力。
3. 恢复工具的选择与原因
应该使用 gs_restore 命令。
解析: gs_restore 是专门用来恢复 -F c(自定义归档)、-F d(目录归档)和 -F t(tar归档)格式的备份文件的。gs_restore 提供了强大的选择性恢复功能,你可以通过 -t、-n 等参数指定恢复哪些表或模式,也可以控制恢复的顺序(例如,先恢复数据再恢复索引)。而 gsql 命令只能执行包含SQL语句的纯文本格式(-F p)的备份文件,无法处理自定义归档格式。
总结:
在磁盘空间有限且需要灵活恢复的场景下,最佳的实践是使用 自定义归档格式 (-F c) 进行备份,并使用 gs_restore 工具进行恢复。
最佳回答
banjin发表于 2个月前
一、gs_dump 除 - F p (纯文本) 外其余三种备份格式
gs_dump -F 参数支持四种格式:
p:plain(纯文本 SQL,题干已用)
c:custom(自定义归档格式,压缩二进制)
d:directory(目录格式,多文件目录归档)
t:tar(tar 打包归档格式)
剩余三种:c(custom)、d(directory)、t(tar)
二、空间紧张 + 需要单表灵活恢复 → 选用:-F c(custom 自定义格式)
选型理由:
custom 格式内置压缩,1G 源数据备份后远小于 500MB,解决/backup只剩 500M 磁盘不足问题;
支持增量选择性恢复:恢复时可指定仅恢复 schema、仅恢复单表orders,满足题目「只恢复 orders 一张表」的灵活需求;
tar 无内置压缩、directory 分散成多个文件不方便磁盘受限场景存储;plain 无压缩体积超标。
修正后备份命令示例
bash
运行
gs_dump -U gbase -W Gbase_123 -f /backup/sales_backup.dump -p 5432 postgres -n sales -F c
三、恢复使用命令:gs_restore,不用 gsql
原因:
-F c/d/t三种非文本二进制归档格式不能用 gsql 导入,gsql 仅能执行纯文本.sql(-F p);
gs_restore是 GBase8c 配套的专用归档恢复工具,专门解析 custom/tar/directory 格式备份,支持:
整库 / 整 schema 恢复
按需单表恢复(-t orders),契合本题只恢复 orders 需求。
单表恢复示例
bash
运行
gs_restore -U gbase -d postgres -t orders /backup/sales_backup.dump
GBase用户50900发表于 2个月前
建议升级一下版本,新版本中可能已经修复了这个问题。
GBase用户51966发表于 2个月前
建议在测试环境先验证一下,确认没问题后再上生产。
一个老汉发表于 2个月前
可以参考一下相关文档,上面有详细的步骤说明。
GBase用户51510发表于 2个月前
这个问题之前有人遇到过,可以搜索一下论坛中的相关帖子。
GBase用户51511发表于 2个月前
这个问题之前有人遇到过,可以搜索一下论坛中的相关帖子。
佛洛伊得发表于 2个月前
检查一下日志输出,通常日志中会有有用的错误信息。
塔山发表于 2个月前
建议升级一下版本,新版本中可能已经修复了这个问题。
用户头像
GBase用户28017发表于 2个月前
压缩。
GBase用户21020发表于 2个月前
学习了
李雪洋发表于 2个月前
三种格式:c, d, t;选c;gs_restore