sql 复制数据库?许多人对sql 复制数据库的问题没有了解,本站就来讲讲sql 复制数据库的问题,希望我的解答对你有所帮助。
PostgreSQL 主从复制是一种 实时同步数据 的机制,可以实现 高可用性 (HA)、读写分离 和 负载均衡。其核心是 WAL (Write-Ahead Logging) 日志与 流复制机制。
一、核心概念回顾Primary (主库):负责处理读写请求,所有数据修改都在这里进行。Standby (备库/从库):实时复制主库的 WAL 日志,并回放,保证数据一致性(通常是只读)。WAL:预写日志,任何修改必须先写 WAL 才能写数据文件。流复制:备库通过 TCP 流式接收 WAL 日志并应用,保持与主库同步。复制模式异步复制(默认):主库提交事务后立即返回,不等待备库确认,性能高但可能丢失极少数据。同步复制:主库必须等待备库确认 WAL 写入后才提交,保证强一致性但增加延迟。二、环境准备服务器:主库 (Primary):192.168.1.10从库 (Standby):192.168.1.20PostgreSQL 版本:推荐 12+,例如 v15网络要求:主从之间 TCP 5432 端口畅通三、主库配置1. 创建复制用户
CREATE ROLE repl_user WITH REPLICATION LOGIN PASSWORD 'your_strong_password';2. 修改 postgresql.conf
通常路径 /var/lib/pgsql/15/data/postgresql.conf
listen_addresses = '*' # 监听所有地址wal_level = replica # 开启复制所需的 WAL 级别max_wal_senders = 10 # 允许的最大复制连接数wal_keep_size = 1024 # WAL 保留大小,避免备库长时间断开archive_mode = onarchive_command = 'test ! -f /pg_archive/%f && cp %p /pg_archive/%f'
重启数据库:
systemctl restart postgresql-153. 配置 pg_hba.conf
host replication repl_user 192.168.1.20/32 md5
重新加载配置:
pg_ctl reload四、备库配置1. 停止数据库
systemctl stop postgresql-152. 清空数据目录
rm -rf /var/lib/pgsql/15/data/*3. 使用 pg_basebackup 拉取主库数据
pg_basebackup -h 192.168.1.10 -U repl_user -D /var/lib/pgsql/15/data/ -Fp -Xs -P -R
说明:-R 会自动创建 standby.signal 并配置 primary_conninfo,非常推荐。
如果没用 -R,需要手动配置:
# standby.signal 文件touch /var/lib/pgsql/15/data/standby.signal# postgresql.auto.conf 添加:primary_conninfo = 'host=192.168.1.10 port=5432 user=repl_user password=your_strong_password'4. 启动备库
systemctl start postgresql-15五、验证复制主库查看复制状态
SELECT application_name, client_addr, state, sync_stateFROM pg_stat_replication;state=streaming 表示复制正常。sync_state=async/sync 表示复制模式。备库验证
SELECT pg_is_in_recovery();
返回 t 表示备库处于恢复模式(只读)。
六、故障转移 (Failover)
主库宕机时,可以将备库提升为主库:
pg_ctl promote -D /var/lib/pgsql/15/data/# 或touch /var/lib/pgsql/15/data/promote
应用端需切换连接到新的主库。其余备库需重新指向新主库。
七、生产环境建议手动模式适合学习或测试,但不适合大规模生产。推荐工具:Patroni:支持自动故障转移,高可用首选方案。Pgpool-II:支持连接池、负载均衡、故障转移。repmgr:方便的复制和 failover 管理工具。八、总结
性能高,延迟低
存在极小数据丢失风险
数据零丢失
延迟高,影响性能
最佳实践:
异步复制作为默认方案,适合大多数场景。关键数据场景使用同步复制,结合 Patroni/pgpool-II 实现自动化高可用。
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!
