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个归档恢复
 

你可能感兴趣的:(postgresql,数据库)