postgresql双机热备份之流复制

PostgreSQL日志传送的方法有两种,一种是基于文件(base-file)的传送方式,一种是流复制(streamingreplication)的方式。

基于文件(base-file)的传送方式,这种方式是PostgreSQL9.0之前就提供的方法。也就是服务器写完一个WAL日志文件后,才把WAL日志文件拷贝到standby数据库上去应用。

流复制的方式是PostgreSQL提供的一种服务器间的数据复制方式。这是PostgreSQL9.0才提供的新方法。这个方法就是事务提交后,主服务器则在WAL记录产生时即将它们以流式传送给后备服务器而不必等到WAL文件被填充。就是把生成的日志异步的传送到standby数据库上应用,这比基本文件的日志传送方法有更低的数据延迟。

本文参考了其他博客和官网介绍,演示在linux系统下两个postgresql 数据库流复制的情况。

目录

环境准备

主服务器配置

备服务器配置

主从配置验证


环境准备

1. 两个单台的pg数据库已搭建好,单台pg详细安装过程查看之前的这篇文章。

Postgresql数据库安装和常见的报错问题

2. 查看防火墙是否关闭

systemctl status firewalld
systemctl stop firewalld

3.服务器两台

服务器IP地址
主数据库服务器192.168.56.10
备数据库服务器192.168.56.11

redhat 7.6

数据库安装目录:/data/postgresql/

主服务器配置

1. 修改postgresql.conf文件

vi /data/postgresql/data/postgresql.conf

修改内容:

listen_addresses = '*'

max_connections = 100 #默认参数,非主从配置相关参数,表示到数据库的连接数

wal_level = hot_standby               #主从设置为热血模式,流复制必选

synchronous_commit = on

archive_mode = on

archive_command = 'cp %p /data/postgresql/xlog_archive/%f'

max_wal_senders=5 #流复制允许连接进程

wal_keep_segments =32

hot_standby = on

max_standby_archive_delay = -1

max_standby_streaming_delay = -1

wal_receiver_status_interval = 2

hot_standby_feedback = on

restart_after_crash = off

2. 创建复制用户,主从同步使用

su postgres   #Linux命令#进入postgres用户

psql #Linux命令 #进入postgresql数据库

create role repl with login replication password 'password';

3. 修改pg_hba.conf

host        replication        all        0.0.0.0/0        md5

4.重启/停止主库服务

pg_ctl restart -D /data/postgresql/data

pg_ctl stop -D /data/postgresql/data

备服务器配置

1. 基础备份,从库安装完成后,不初始化,若已经初始化,删除其data目录

rm -rf  /data/postgresql/data/*

2. 通过pg_basebackup命令搭建主备流复制环境, 拷贝主数据库的data目录

su - postgres

pg_basebackup -h 10.251.95.28 -p 5432 -U repl -D /data/postgresql/data -X stream -P -R

其中输入的密码为在主库创建repl用户时的密码password

下图表示从主数据库的数据目录拷贝成功 

备注:

-h,主库主机,-p,主库服务端口;

-U,复制用户;

-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;

-P,同--progress,显示进度;

-D,输出到指定目录;

-R, 生成recovery.conf文件

因为主库采用的是md5认证,这里需要密码认证。

3.从库配置文件配置

创建或修改恢复文件recovery.conf

vi  /data/postgresql/data/recovery.conf

修改内容:

recovery_target_timeline = 'latest'

standby_mode = on

primary_conninfo = 'host=192.168.56.10 port=5432 user=repl application_name=myapp-1 password=password keepalives_idle=60 keepalives_interval=5 keepalives_count=5'      

restore_command = 'cp /data/postgresql/xlog_archive/%f %p'  

备注:

standby_mode = on  #指明从库身份

primary_conninfo = '***'  #连接到主库信息

recovery_target_timeline = 'latest'     #同步到最新数据

4. 启动从库服务

pg_ctl start -D /data/postgresql/data

主从配置验证

方式1:

主数据服务器:

pg_controldata -D  /data/postgresql/data

 

从数据服务器:

pg_controldata -D  /data/postgresql/data

 ​​​​​​​

方式2:

#主库创建表test:

create table test(id int primary key,name varchar(20)); 

insert into test values (1,'str1'); 

select * from test; 

#从库可查询,从库只能读,不可插入数据

select * from test; 

insert into test values (2,'str2'); 

参考文章:

PostgreSQL主备流复制机制详解

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大宇进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值