postgresql在windows 环境下的热备hot standby

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_33151213/article/details/90447006

本文参考:postgresql在windows 环境下的热备hot standby

主要是根据上面的博客完成的配置。但是配置完成之后并没有成功,可能是自己某一步没处理好,又在网上搜索了别的资料,最终完成了postgresql的热备。所以就把自己的过程记录一下。


Windows环境

操作系统 : win7
数据库 :PostgreSQL 9.4 
主机两台 :
	master:192.168.1.160(根据实际情况修改),主库
	 slave:192.168.1.163(根据实际情况修改),备库

一、安装postgresql 9.4

master端和slave端安装PostgreSql9.4数据库,程序位置:C:\Program Files\PostgreSQL\,位置没有要求,根据自己实际情况安装,安装完成后(安装完成不用做其他配置,记得账户密码),通过pgAdmin工具测试两端的数据库是否可以相互连接通。

tips:
1.如果无法连接,请在防火墙配置入站规则,启用5432端口。

2.请确保两台主机的ip在同一网段,ip的最后一位最好是相邻的。(因为当时测试的时候,一直连不上,所以改了ip之后就可以了,也不知道是不是这个原因)

3.打开C:\Program Files\PostgreSQL\data目录下的pg_hba.conf文件,添加
host all all 0.0.0.0/0 md5,如图所示
在这里插入图片描述


二、创建流复制用户

master端执行:
在这里插入图片描述

右键数据库,create脚本

CREATE USER 用户名 replication LOGIN CONNECTION LIMIT 3  ENCRYPTED PASSWORD ‘密码’;

(用户名和密码根据自己情况设置)
在这里插入图片描述

请记得新建的用户名(repuser)和密码(repuser), 后面需要这个用户来进行热备。
额外提供查询方法:

SELECT rolname FROM pg_roles;  查询用户信息
DROP ROLE 用户名;  删除某个用户

三、配置master端的访问文件pg_hba.conf

pg_hba.conf文件在C:\Program Files\PostgreSQL\9.4\data路径下,请根据自己的实际安装路径查询。
打开pg_hba.conf文件,在文件最后面添加:

host replication repuser 192.168.1.163/16 md5

说明:repuser是开始新建的用户名,后面的ip是slave端的ip地址
在这里插入图片描述


四、配置master端postgresql.conf文件

postgresql.conf文件中C:\ProgramFiles\PostgreSQL\9.4\data路径下,请根据自己的实际安装路径查询。

打开postgresql.conf文件,在文件最后面添加以下配置,配置完成,需重新启动数据库

max_wal_senders = 1 
wal_level = hot_standby
archive_mode = on 
archive_command = 'cd ./'
hot_standby = on
wal_keep_segments = 64

在这里插入图片描述
注:
max_wal_senders是slave库的节点数,有多少个slave库就设多少,
wal_level是write ahead log参数值,设置流复制务必将此值更新成hot_standby
wal_keep_segments默认值是16,是PG_XLOG下的日志文件数相关参数
archive也可以选择关闭,归档是定时恢复用的,流复制不是必须的


五、master端主库备份

  1. 开启文件备份,前提是wal_level参数值必须是archive或者host_standby,第四步已经配置过。
    执行语句:
select pg_start_backup('Replition work');

在这里插入图片描述

  1. 拷贝masterC:\Program Files\PostgreSQL\9.4\data文件夹下面的所有内容,并复制到slave端的data文件夹下面
    slave端的postgres数据库需要先停止,然后清空slave端:C:\Program Files\PostgreSQL\9.4\data的内容,注意是清空data文件下面的内容,不是删除整个data文件夹
    master端复制``data文件夹下面的所有文件,然后粘贴到slave端的data```文件夹下面。

  2. 上述步骤完成后,结束掉master端的备份
    执行语句:

select pg_stop_backup(),current_timestamp;

在这里插入图片描述

总结下第五步:

1.master端开启文件备份,执行语句:select pg_start_backup('Replition work');

2.复制master端data文件夹下面的所有文件到slave端的data文件夹下面。slave端需要先停止数据库,且slave端data文件夹下面的文件都要删除。

3.master端结束文件备份,执行语句:select pg_stop_backup(),current_timestamp;

六、配置slave端recovery.conf文件

slave端:C:\Program Files\PostgreSQL\9.4\share\recovery.conf.sample文件拷贝到C:\Program Files\PostgreSQL\9.4\data文件夹下,重命名为recovery.conf

在该文件末尾新增以下内容:

standby_mode ='on'

primary_conninfo='host=192.168.1.160 port=5432 user=repuser password=repuser keepalives_idle=60'

说明:上面的地址 host= 是master端的地址,端口也是,user和password是第二步创建的用户名和密码。
在这里插入图片描述


七、配置slave端pgpass.conf文件

该文件的默认地址在:C:\Users\Administrator\AppData\Roaming\postgresql。这个文件里面可以放入连接远程数据库的默认账号密码,免去手动连接输入账号密码。
APPData文件夹在Windows下默认是隐藏的,请先设置显示隐藏文件夹来进行操作。在文件最后一行添加:

192.168.1.160:5432:postgres:repuser:repuser

说明:上面ip是master端的地址,端口也是,postgres是你的数据库名,repuser:repuser是账号和密码,是第二步创建的用户名和密码。
在这里插入图片描述


八、删除salve端postmaster.pid和pg_xlog文件夹内容

删除slave端(从master端拷过来的)的postmaster.pid文件和pg_xlog文件夹中内容
slave端打开C:\Program Files\PostgreSQL\9.4\data这个路径,删除postmaster.pidpg_xlog文件夹中的内容


九、启动slave端数据库

打开slave端的数据库, 可以看到slave端和master端上面的数据库是一样的,
当对master端数据库进行insertupdatedelete操作时,slave端也会同步更新数据,且slave端的会话为只读,不能进行insertupdatedelete操作。
在这里插入图片描述

注:

请确保操作之前,master端和salve端的postgresql可以相互连接上。以上master端ip,slave端ip以及安装路径,配置信息以自己当前的操作环境为准,本教程仅作为一个参考,实际参数需要配置自己的。


操作过程中遇到的问题:

错误信息1:
在这里插入图片描述

解决方法:
请在master端和slave端打开防火墙,在高级设置里面,配置一个新的入站规则,开启5432端口。两端都要配置。


错误信息2:
在这里插入图片描述
解决方法:
打开C:\Program Files\PostgreSQL\9.4\data\文件夹下面的pg_hba.conf文件,添加host all all 0.0.0.0/0 md5,配置完成后重启数据库。如果配置完成后,还是无法连接,请将master端和slave端的ip都设置为192.168.1.1xx这种,不要是192.168.1.1xx和192.168.1.2xx或者是192.168.1.x这样的,也就是确保master端和slave端ip最后一位数字的开头是一样的。


错误信息3:
备份完成后,slave端无法启动,通过日志查看提示:在主用服务器和备用服务器之间,数据库系统标识符是不一样的

解决方法:
master端和slave端的数据库版本要一样的。

猜你喜欢

转载自blog.csdn.net/sinat_33151213/article/details/90447006