最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
通过Bash自动化实现PostgreSQL主从复制的实战指南
时间:2026-06-08 10:58:55 编辑:袖梨 来源:一聚教程网
基于 Bash 自动化实现 PostgreSQL 主从复制
支持 Ubuntu / Debian 系统(APT)
适用于 PostgreSQL 16 / 17 最新版本
一、PostgreSQL 主从架构原理
PostgreSQL 主从复制(Streaming Replication)工作流程:
- 主库写入数据
- 生成 WAL 日志
- 从库实时拉取 WAL
- 重放日志实现数据同步
简单理解:
主库负责写入
从库负责读取 + 数据备份
适合:
- 读写分离
- 数据容灾
- 高可用架构基础
二、架构流程图(Mermaid)
flowchart LR A[Client 写入] --> B[Primary 主库] B --> C[生成 WAL 日志] C --> D[Replica 从库] D --> E[重放 WAL 同步数据]
三、自动化部署脚本
#!/bin/bashPRIMARY_IP="192.168.1.10"REPLICA_IP="192.168.1.11"REPL_USER="repl_user"REPL_PASS="YourStrongPassword"set -eecho "=== PostgreSQL 一主一从自动化部署脚本 ==="echo "1. 安装并配置为主库 (Primary)"echo "2. 安装并配置为从库 (Replica)"read -p "请选择模式 (1/2): " MODEsudo apt updatesudo apt install -y postgresql postgresql-contribPG_VER=$(psql --version | grep -oE '[0-9]+' | head -1)DATA_DIR="/var/lib/postgresql/$PG_VER/main"CONF_DIR="/etc/postgresql/$PG_VER/main"if [ "$MODE" == "1" ]; then sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/ " $CONF_DIR/postgresql.conf sudo -u postgres psql -c "CREATE ROLE $REPL_USER WITH REPLICATION LOGIN ENCRYPTED PASSWORD '$REPL_PASS';" echo "host replication $REPL_USER $REPLICA_IP/32 md5" | sudo tee -a $CONF_DIR/pg_hba.conf sudo systemctl restart postgresqlelif [ "$MODE" == "2" ]; then sudo systemctl stop postgresql sudo rm -rf $DATA_DIR/* sudo -u postgres PGPASSWORD=$REPL_PASS pg_basebackup -h $PRIMARY_IP -D $DATA_DIR -U $REPL_USER -v -P -R --slot=replica_slot_1 -C sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/ " $CONF_DIR/postgresql.conf sudo systemctl start postgresqlelse echo "无效选项" exit 1fisudo systemctl status postgresql --no-pager
四、脚本逻辑逐步解析
1️⃣ set -e 的作用
set -e
作用:
一旦有命令执行失败,脚本立即退出
防止错误被忽略。
2️⃣ 自动识别 PostgreSQL 版本
PG_VER=$(psql --version | grep -oE '[0-9]+' | head -1)
作用:
自动匹配安装版本路径,例如:
/var/lib/postgresql/16/main
避免写死版本号。
3️⃣ 主库模式做了什么?
✔ 开启监听所有 IP
✔ 创建复制账号
✔ 修改 pg_hba.conf 允许从库连接
✔ 重启数据库
核心:
CREATE ROLE repl_user WITH REPLICATION LOGIN PASSWORD 'xxx';
4️⃣ 从库模式做了什么?
✔ 停止数据库
✔ 删除旧数据目录
✔ 执行 pg_basebackup 拉取数据
✔ 自动生成 standby.signal 文件
五、pg_basebackup 参数详解
pg_basebackup -h 主库IP -D 数据目录 -U 用户 -v -P -R --slot=replica_slot_1 -C
| 参数 | 作用 |
|---|---|
| -h | 主库地址 |
| -D | 数据存放目录 |
| -U | 复制账号 |
| -v | 显示详细日志 |
| -P | 显示进度条 |
| -R | 自动生成恢复配置 |
| --slot | 使用复制槽 |
| -C | 自动创建复制槽 |
六、生产环境注意事项
1. 必须放通 5432 端口
检查:
ufw status
2. 复制槽风险
如果从库长期宕机:
主库 WAL 会堆积
可能导致磁盘爆满。
建议:
定期检查:
SELECT * FROM pg_replication_slots;
3. 主库参数建议调整
在 postgresql.conf 中增加:
wal_level = replicamax_wal_senders = 10max_replication_slots = 10
七、验证主从是否成功
主库执行:
SELECT * FROM pg_stat_replication;
看到状态为:
streaming
说明正常。
从库执行:
SELECT pg_is_in_recovery();
返回:
t
说明当前为从库状态。
总结
这套脚本适用于:
- 内网双机部署
- 实验环境
- 小型生产环境
以上就是基于Bash自动化实现PostgreSQL主从复制的实战指南的详细内容,更多关于Bash PostgreSQL主从复制的资料请关注本站其它相关文章!
相关文章
- 21世纪教育网官网登录入口 - 2026中小学教育资源平台 06-08
- 返利网有哪些平台推荐 - 2026主流返利网站大全 06-08
- 菜鸟裹裹快递员专用App - 快递接单派件一体化工具 06-08
- 优翼课件官网入口 - 2026最新免费下载平台 06-08
- Web of Science官网入口 - 2026最新直达链接 06-08
- 快对网页版登录入口 - 2026最新在线使用地址 06-08
