sql 复制数据库(PostgreSQL 主从复制 完整指南)

sql 复制数据库(PostgreSQL 主从复制 完整指南)

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,本文到此结束,如果可以帮助到大家,还望关注本站哦!

sql 复制数据库(PostgreSQL 主从复制 完整指南)

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

最新文章

热门文章

本栏目文章