PostgreSQL 14.5执行pg_basebackup报错的原因排查与解决咨询
PostgreSQL 14.5 pg_basebackup 报错分析与解决
报错原因
- 备份一致性依赖WAL日志:
pg_basebackup执行时,先拷贝数据文件,同时需要持续读取WAL日志同步备份期间的数据库变化。若主库的WAL段在备份完成前被自动清理(比如触发checkpoint后回收、归档后删除),备份进程无法获取所需WAL段,就会抛出could not get COPY data stream并提示WAL段已移除。 - 参数版本不兼容:PostgreSQL 14已废弃
wal_keep_segments参数,改用wal_keep_size作为替代。直接添加wal_keep_segments会导致数据库启动失败,属于参数适配错误。
解决办法
1. 配置正确的WAL保留参数
- 编辑PostgreSQL配置文件
postgresql.conf,设置wal_keep_size为合适的值(例如wal_keep_size = 16GB,具体大小需根据备份时长、WAL生成速率调整,确保备份期间产生的WAL不会被清理)。 - 重启PostgreSQL服务使配置生效。
- 说明:
wal_keep_size定义主库需要保留的WAL日志最小总大小,相比旧参数wal_keep_segments(按段数统计),按大小统计更灵活且适配新版本。
2. 重新执行备份命令
再次运行备份命令:
pg_basebackup -P -Xf -Ft -z -R
此时主库会保留足够的WAL段,确保备份过程能完整获取所需日志。
3. 长期备份优化方案(可选)
如果备份时长较长或WAL生成速率高,建议配置WAL归档:
- 在
postgresql.conf中设置archive_mode = on、archive_command(例如archive_command = 'cp %p /path/to/archive/%f',将WAL归档到指定目录)。 - 配合备份命令的
-X fetch参数,即使主库清理了WAL段,备份进程也能从归档中获取所需日志,进一步避免此类错误。
内容的提问来源于stack exchange,提问作者user30197
相关产品推荐
相关产品推荐

