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

如何实现Linux服务器间PostgreSQL数据库每日自动同步备份

PostgreSQL跨服务器每日自动备份同步方案

核心思路

借助PostgreSQL自带的pg_dump工具导出源数据库,通过scp传输到备份服务器,再用系统定时任务crontab实现每日自动执行。

具体实现步骤

1. 配置源与备份服务器的免密登录

避免脚本执行时需要手动输入密码,先在源服务器完成密钥配置:

# 源服务器生成RSA密钥对(一路回车使用默认配置即可)
ssh-keygen -t rsa

# 将公钥复制到备份服务器(替换backup_user和backup_server_ip为实际信息)
ssh-copy-id backup_user@backup_server_ip

2. 编写备份同步脚本

在源服务器创建脚本文件,比如/opt/pg_backup_sync.sh,内容如下:

#!/bin/bash

# 配置参数(根据实际环境修改)
SOURCE_DB_NAME="your_source_db"
SOURCE_DB_USER="postgres"
LOCAL_BACKUP_DIR="/tmp/pg_backups"
BACKUP_SERVER_USER="backup_user"
BACKUP_SERVER_IP="x.x.x.x"
BACKUP_SERVER_DIR="/data/pg_backups"
DATE_TAG=$(date +%Y%m%d_%H%M%S)

# 创建本地临时备份目录
mkdir -p $LOCAL_BACKUP_DIR

# 导出数据库(需压缩可添加-z参数,如pg_dump -z -U ...)
pg_dump -U $SOURCE_DB_USER $SOURCE_DB_NAME > $LOCAL_BACKUP_DIR/${SOURCE_DB_NAME}_${DATE_TAG}.sql

# 传输备份文件到备份服务器
scp $LOCAL_BACKUP_DIR/${SOURCE_DB_NAME}_${DATE_TAG}.sql $BACKUP_SERVER_USER@$BACKUP_SERVER_IP:$BACKUP_SERVER_DIR

# 清理本地7天前的旧备份(可选,按需调整保留天数)
find $LOCAL_BACKUP_DIR -name "*.sql" -mtime +7 -delete

给脚本添加执行权限:

chmod +x /opt/pg_backup_sync.sh

3. 配置定时任务自动执行

编辑源服务器的crontab:

crontab -e

添加一行配置(示例为每天凌晨2点执行,可按需调整时间):

0 2 * * * /opt/pg_backup_sync.sh >> /var/log/pg_backup_sync.log 2>&1

保存退出后,crontab会自动生效,日志文件会记录执行细节,方便排查问题。

4. 验证备份有效性

手动执行脚本测试流程是否正常:

/opt/pg_backup_sync.sh

之后登录备份服务器,检查目标目录下是否生成对应日期的备份文件;也可定期用psql导入备份文件验证完整性。

注意事项

  • 确保源服务器的postgres用户拥有pg_dump执行权限,且能免密登录备份服务器
  • 备份服务器的目标目录需提前创建,并给指定用户分配写入权限
  • 大数据库建议启用压缩导出,减少传输带宽和存储占用
  • 可根据业务需求调整备份保留天数,修改find命令中的-mtime +7参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:44:55