本文参考: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端主库备份
- 开启文件备份,前提是
wal_level
参数值必须是archive或者host_standby
,第四步已经配置过。
执行语句:
select pg_start_backup('Replition work');
-
拷贝
master
端C:\Program Files\PostgreSQL\9.4\data
文件夹下面的所有内容,并复制到slave
端的data
文件夹下面
slave
端的postgres数据库需要先停止,然后清空slave端:C:\Program Files\PostgreSQL\9.4\data的内容
,注意是清空data
文件下面的内容,不是删除整个data
文件夹
在master
端复制``data文件夹下面的所有文件,然后粘贴到
slave端的
data```文件夹下面。 -
上述步骤完成后,结束掉
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.pid
和pg_xlog文件夹
中的内容
九、启动slave端数据库
打开slave
端的数据库, 可以看到slave
端和master
端上面的数据库是一样的,
当对master
端数据库进行insert
,update
,delete
操作时,slave
端也会同步更新数据,且slave
端的会话为只读,不能进行insert
,update
,delete
操作。
注:
请确保操作之前,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端的数据库版本要一样的。