You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Greenplum 6.x实例备份:如何在所有节点执行pg_start_backup命令?

Greenplum 6.x 全节点文件系统级备份(解决批量执行pg_start_backup问题)

你没法用gpbackup和pg_dump,只能走文件系统级备份,核心是要在Master和所有Segment节点同时进入备份模式,下面是具体操作:

用Greenplum自带的gpssh批量执行命令

Greenplum的gpssh工具天生就是用来跨节点批量操作的,不用自己挨个登录节点:

1. 先准备节点列表文件

新建一个all_hosts.txt,把Master和所有40台Segment的主机名/IP都写进去,每行一个:

mdw
sdw1
sdw2
...
sdw39

2. 批量启动备份模式

在Master节点执行这条命令,一次性让所有节点进入备份状态:

gpssh -f all_hosts.txt -e "psql -U gpadmin -d postgres -c 'SELECT pg_start_backup(''base_backup'', true);'"
  • -e参数会让每个节点返回执行结果,方便你确认操作成功
  • 第二个参数true允许备份期间正常写入数据(温备份,无需停业务)

3. 验证备份模式状态

执行这条命令确认所有节点都已进入备份模式:

gpssh -f all_hosts.txt -e "psql -U gpadmin -d postgres -c 'SELECT pg_is_in_backup();'"

每个节点返回t就说明操作生效。

4. 复制/pgdata/目录到外部存储

用gpscp或rsync批量把每个节点的/pgdata/目录同步到外部存储(比如挂载的移动硬盘、远程备份服务器):

# 示例:先同步到Master临时目录,再转存到外部
gpscp -f all_hosts.txt /pgdata/=:/tmp/gp_backup/$(hostname)/

或者直接用rsync同步到远程备份服务器:

gpssh -f all_hosts.txt -e "rsync -avz /pgdata/ backup_server:/gp_backups/$(hostname)/"

怕漏文件的话,可以先在每个节点把/pgdata/打包成压缩包再复制:

gpssh -f all_hosts.txt -e "tar -czf /tmp/pgdata_backup.tar.gz /pgdata/"

5. 批量停止备份模式

等所有节点的/pgdata/复制完成后,执行这条命令结束备份,此时每个节点会生成一致性的WAL文件:

gpssh -f all_hosts.txt -e "psql -U gpadmin -d postgres -c 'SELECT pg_stop_backup();'"

命令返回的WAL位置建议记录下来,恢复时用于校验一致性。

注意事项

  • 确保gpadmin用户在所有节点间有免密SSH权限,否则gpssh会逐个要求输入密码,影响批量操作效率
  • 备份期间尽量避免大流量写入操作,防止WAL文件过度膨胀
  • 恢复时,需将每个节点的备份数据放回原/pgdata/路径,再启动Greenplum服务,必要时用备份的WAL文件完成一致性恢复

内容的提问来源于stack exchange,提问作者Gregor76

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:54:24