PostgreSQL-12 通过归档WAL日志同步主备数据

前期安装工作参考上一篇

su postgres

创建数据库目录
mkdir /home/pg12/data1
mkdir /home/pg12/data2
chmod 700 /home/pg12/data1
chmod 700 /home/pg12/data2

创建日志归档目录
mkdir /home/pg12/wal

初始化主库
/usr/pgsql-12/bin/initdb -D /home/pg12/data

修改主库postgresql.conf
archive_mode = on               # enables archiving; off, on, or always
archive_command = 'test ! -f /home/pg12/wal/%f && cp %p /home/pg12/wal/%f'
#超时强制归档,例:如果10分钟数据库都没有什么活动,一个redo文件没有写完,就不会归档, 
#但是我们希望数据库至少10分钟要切换一个日志,则可以使用archive_timeout

#我这里改成1秒,只要有数据变动就会归档
archive_timeout = 1                # number of seconds; 0 disables

启动主库
/usr/pgsql-12/bin/pg_ctl -D /home/pg12/data1 start

复制主库文件到备库
cp -r /home/pg12/data1/* /home/pg12/data2

删除目录中的pid文件避免无法启动
rm /home/pg12/data2/postmaster.pid

修改备库postgresql.conf
先把archive_mode相关参数注释掉,备库不需要归档

设置用归档日志恢复的命令
restore_command = 'cp /home/pg12/wal/%f %p'

# 重试恢复的间隔,默认5秒,我改成1秒为了尽快同步数据
wal_retrieve_retry_interval = 1s    

创建信号文件
touch /home/pg12/data2/standby.signal

启动备库
/usr/pgsql-12/bin/pg_ctl -D /home/pg12/data2 start

完成后可以查看备库日志,发现在不停尝试获取WAL日志

cd /home/pg12/data2/log

查看日志文件

cp: 无法获取"00000001000000000000001D" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"00000002.history" 的文件状态(stat): 没有那个文件或目录

在主库添加数据,发现日志归档目录会新生成一个文件,

备库也会拿到文件进行恢复,并继续尝试获取新的日志

2022-07-19 09:26:03.153 日志:  从归档中恢复日志文件 "00000001000000000000001D"
cp: 无法获取"00000001000000000000001E" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"00000002.history" 的文件状态(stat): 没有那个文件或目录

END

说明:
archive_timeout = 1 则主库每秒生成1个归档,但是没有数据变动是不会归档的
wal_retrieve_retry_interval = 1s 则备库每秒尝试获取1个归档恢复
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值