1、测试环境
Ubuntu 20.04.3 LTS
timescaledb-ha:pg14.12-ts2.15.2-all-oss
pgBackRest 2.54.2
2、创建postgresql容器实例
docker:
docker run -d \
--name timescaledb \
--publish 5433:5432 \
--env TZ=Asia/Shanghai \
--env POSTGRES_PASSWORD=123456 \
--volume /data/postgres/pgdata/data:/home/postgres/pgdata/data \
--volume /data/postgres/pgdata/backup:/home/postgres/pgdata/backup \
--volume /data/postgres/pgdata/backup/pgbackrest.conf:/home/postgres/pgdata/backup/pgbackrest.conf \
--log-driver=journald \
--restart always \
registry.cn-wulanchabu.aliyuncs.com/ribbon-images/timescaledb-ha:pg14.12-ts2.15.2-all-oss
注意:
查看镜像的数据目录,根据实际的目录进行宿主机挂载
pg数据目录: /home/postgres/pgdata/data
备份目录:/home/postgres/pgdata/backup
pgBackRest配置文件:/home/postgres/pgdata/backup/pgbackrest.conf
3、创建备份目录并设置权限
/data/postgres/pgdata/data
/data/postgres/pgdata/backup
/data/postgres/pgdata/backup/pgbackrest.conf
mkdir -p /data/postgres/pgdata/data
chmod 750 /data/postgres/pgdata/data
chown 1000:1000 /data/postgres/pgdata/data
4、安装 pgbackrest
进入容器安装 pgbackrest:
docker exec -u 0 -it timescaledb bash
# 在容器内执行
apt update&& apt upgrade -y && apt install -y pgbackrest
5、配置 pgbackrest
5.1、创建配置文件 pgbackrest.conf
编辑 vim /data/postgres/pgdata/backup/pgbackrest.conf:
# 增加下面内容
[global]
repo1-path=/var/lib/pgbackrest # 容器内的备份仓库路径(需挂载到宿主机)
repo1-retention-full=3 # 保留 3 个全量备份
repo1-retention-diff=7 # 保留 7 个增量备份
process-max=4 # 并行压缩/传输
compress-type=lz4 # 压缩算法
start-fast=y # 快速启动备份
log-level-console=info
[mycluster]
pg1-path=/var/lib/postgresql/data # 容器内的数据库数据目录
5.2、修改 PostgreSQL 配置
1、编辑 /data/postgres/pgdata/data/postgresql.conf:
archive_mode = on
archive_command = 'pgbackrest --stanza=mycluster archive-push %p'
archive_timeout = 3600 #该时间根据实际需求修改
wal_level = replica
注意: mycluster必须和后面的创建备份存储库名称保持一致
2、修改pg_hba.conf,确认允许本地 TCP/IP 连接:
编辑 /data/postgres/pgdata/data/pg_hba.conf
local all all trust # 允许本地 socket 连接
host all all 127.0.0.1/32 trust # 允许本地 TCP/IP 连接
3、重启容器使配置生效:
docker restart timescaledb
6、初始化并执行备份
6.1、创建备份存储库
docker exec -it timescaledb pgbackrest --stanza=mycluster stanza-create
6.2、全量备份
docker exec -it timescaledb pgbackrest --stanza=mycluster --type=full backup
6.3、增量备份
docker exec -it timescaledb pgbackrest --stanza=mycluster --type=incr backup
6.4、查看备份列表
docker exec timescaledb pgbackrest --stanza=mycluster info
6.5、定时备份
6.5.1、编辑crontab添加定时任务
crontab -e
注意: 第一次需要选择使用vim还是nano编辑
6.5.2、添加任务
每天凌晨 2 点自动执行增量备份
0 2 * * * /usr/bin/docker exec timescaledb pgbackrest --stanza=mycluster --type=incr backup
查看任务列表
crontab -l
6.5.3、查看日志
tail -f -n 200 /var/log/syslog | grep CRON
7、恢复数据
7.1、停止容器
docker stop timescaledb
7.2、执行恢复
使用匿名容器把数据恢复到pg的数据目录
docker run --rm -v /data/postgres/pgdata/data:/home/postgres/pgdata/data \
-v /data/postgres/pgdata/backup:/home/postgres/pgdata/backup \
-v /data/postgres/pgdata/backup/pgbackrest.conf:/home/postgres/pgdata/backup/pgbackrest.conf \
registry.cn-wulanchabu.aliyuncs.com/ribbon-images/timescaledb-ha:pg14.12-ts2.15.2-all-oss \
pgbackrest --stanza=mycluster restore
7.3、重新启动容器
docker start timescaledb
8、扩展建议
8.1、混合备份策略
每周一次全量备份 + 每日增量备份,减少恢复时间
# 每周日凌晨 2 点全量备份(UTC)
0 2 * * 0 docker exec timescaledb pgbackrest --stanza=mycluster --type=full backup
# 每日凌晨 2 点增量备份(UTC)
0 2 * * 1-6 docker exec timescaledb pgbackrest --stanza=mycluster --type=incr backup
8.2、备份保留策略
在 pgbackrest.conf 中配置保留策略,例如保留 3 个全量备份
[global]
repo1-retention-full=3
8.3、加密与压缩
如果备份敏感数据,启用加密和压缩
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=YourSecurePassword
compress=y