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

PostgreSQL12+TimescaleDB容器执行pg_basebackup关闭,如何配置主从复制?

问题根因

你遇到的崩溃问题核心是操作流程错误和权限不匹配:

  • 你在运行中的PostgreSQL容器内直接清空数据目录执行备份,运行中的PostgreSQL进程会持续读写数据目录下的postmaster.pid、pg_stat_tmp/*等文件,小数据量备份耗时短,进程还未触发错误检测就已完成备份;大数据量备份耗时长,进程读写缺失的文件失败,触发自动关闭逻辑
  • 你在容器内以root用户执行pg_basebackup,生成的备份文件属主为root,而容器内PostgreSQL默认使用uid为999的postgres用户运行,无权限读写备份文件,进而触发大量权限报错导致服务崩溃
正确操作步骤

1. 执行离线备份,避免运行中进程干扰

首先停止从库原有运行的容器:

docker stop timescaledb

使用临时容器挂载从库数据卷执行备份,避免启动PostgreSQL服务:

docker run -it --rm -v timescale_volume:/var/lib/postgresql/data timescale/timescaledb-postgis:latest-pg12 bash
# 进入临时容器后执行以下命令
rm -rf /var/lib/postgresql/data/*
pg_basebackup -h 34.64.147.133 -D /var/lib/postgresql/data -U rep_user -P
# 输入复制用户密码等待备份完成
# 备份完成后修正权限
chown -R postgres:postgres /var/lib/postgresql/data
exit

2. 配置从库复制参数

PG12及以上版本不需要创建recovery.conf,只需添加standby标识和主库连接配置:

# 创建standby标识文件
docker run --rm -v timescale_volume:/var/lib/postgresql/data busybox touch /var/lib/postgresql/data/standby.signal
# 编辑数据目录下的postgresql.conf,添加以下配置
docker run --rm -v timescale_volume:/var/lib/postgresql/data busybox sed -i "s/#primary_conninfo = ''/primary_conninfo = 'host=34.64.147.133 port=5432 user=rep_user password=你的复制用户密码'/" /var/lib/postgresql/data/postgresql.conf
docker run --rm -v timescale_volume:/var/lib/postgresql/data busybox sed -i "s/#hot_standby = on/hot_standby = on/" /var/lib/postgresql/data/postgresql.conf

3. 启动从库验证

docker start timescaledb
# 验证是否进入复制模式,返回t则配置成功
docker exec -it timescaledb psql -U postgres -c "SELECT pg_is_in_recovery();"

内容的提问来源于stack exchange,提问作者윤태일

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:36:03