欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > PostgreSQL主从同步

PostgreSQL主从同步

2024/10/23 23:27:55 来源:https://blog.csdn.net/m0_37559973/article/details/139822917  浏览:    关键词:PostgreSQL主从同步

目录

一、主从复制原理

二、配置主数据库

2.1 创建同步账号

2.2 配置同步账号访问控制

2.3 设置同步参数

3.4 重启主数据库

三、配置从数据库

3.1 停止从库

3.2 清空从库数据文件

3.3 拉取主库数据文件

3.4 配置从库同步参数

3.5 启动从库

四、测试主从

4.1在主库查看从库连接状态

4.2 新增数据测试同步


一、主从复制原理

        PostgreSQL的主从同步主要基于其预写日志(Write-Ahead Log, WAL)机制和流复制(Streaming Replication)功能来实现数据的高可用性和一致性。

        WAL是PostgreSQL确保数据持久性和一致性的一个核心组件。它的工作原理是,任何对数据库的修改操作,在实际修改数据文件之前,都会先记录到WAL中。这意味着,事务的提交不仅仅依赖于数据页的更新,还依赖于相关日志记录到WAL并被确认。这个过程确保了即使在系统崩溃的情况下,也能通过重放WAL日志恢复到一致的状态。

        流复制是PostgreSQL实现主从同步的主要方式,它建立在WAL机制之上,它允许将主服务器(Primary)上的事务日志(WAL, Write-Ahead Logging)实时发送到从服务器(Secondary)。从服务器接收到这些事务日志后,将其应用到自己的数据库中,从而保持与主服务器数据的一致性。

二、配置主数据库

2.1 创建同步账号

CREATE ROLE replica login replication encrypted password 'wsx-123';

2.2 配置同步账号访问控制

# vi /data/db/postgresql/pg_hba.conf

host    replication     replica         192.168.179.135/32      md5

2.3 设置同步参数

# vi /data/db/postgresql/postgresql.conf

wal_level = replica
max_wal_senders = 2

3.4 重启主数据库

pg_ctl -D /data/db/postgresql -l logfile restart

三、配置从数据库

3.1 停止从库

pg_ctl -D /data/db/postgresql -l logfile stop

3.2 清空从库数据文件

rm -rf /data/db/postgresql/*

3.3 拉取主库数据文件

pg_basebackup -h 192.168.179.134 -D /data/db/postgresql -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast

3.4 配置从库同步参数

        由于从库数据文件是从主库拉取过来,需要先删除主库同步相关的参数,然后新增从库同步参数:

vi /data/db/postgresql/postgresql.conf

primary_conninfo = 'host=192.168.179.134 port=5432 user=replica password=wsx-123'
recovery_target_timeline = latest 
hot_standby = on

3.5 启动从库

pg_ctl -D /data/db/postgresql -l logfile start

四、测试主从

4.1在主库查看从库连接状态

select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;

4.2 新增数据测试同步

主库插入数据:

从库数据对比:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com