基于pg连续归档功能做的温备,适用于对数据延时敏感度低的环境
1 主服务器开启连续归档WAL归档
postgresql.conf文件中(默认5分钟写一次日志,我改成了10分钟):
a) 需设置wal_level配置参数为replica或更高
b) 设置archive_mode为on
c) 使用archive_command配置参数指定一个shell命令。
archive_command = 'test ! -f /data0/pgdata/achive/%f && gzip < %p > /data0/pgdata/achive/%f && scp /data0/pgdata/achive/%f postgres@从库ip:/data0/ucdata/achive/ '
d) 设置 max_wal_senders 为 1 或者更高(为了制作备份)
2、修改 pg_hba.conf ,去掉下面这行的注释或将下面这一行写入文件末尾
local replication postgres peer
3、重启主库pg
systemctl restart postgresql-9.6
此时archivedir文件夹中应该开始写入wal日志了
4、制作一个基础备份
pg_basebackup -D /data0/pgdata/achive/base -Ft -z -P
此命令将分别将所有数据库文件作为tar.gz格式写入base文件夹中
5、以与主库完全相同的路径和版本建立一个新的pg,并创建相同的tablespace
6、将上面的制作的基础解压并移动到对应的从库目录中,将主库生成的日志发送到从库achive目录
7、在从库主目录创建一个recovery.conf文件,内容如下
standby_mode = 'on'
#primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'
restore_command = 'gunzip < 从库achive目录/%f > %p'
#archive_cleanup_command = 'pg_archivecleanup /data1/ucdata/achive/ %r'
8、启动从库pg,并观察日志