一.原理
PITR原理
使用wal日志来备份数据库
配置完成后,实时备份,备库只能读取,不能写入
二.操作
主机名 | ip地址 | 角色 | 数据目录 |
---|---|---|---|
pg0 | 110.0.0.100 | 主库 | /home/postgres/data |
pg1 | 110.0.0.101 | standby | /home/postgres/data |
1.主数据配置
在 /home/postgres/data/pg_hba.conf 中做配置
# md5 也可以是 sha加密
host replication all 0/0 md5
此语句保证任何网络都可以发起到本数据库的流复制连接
另外还有几个参数
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica
# max_wal_size 默认为 80 MB,该值很小容易导致备库失效
max_wal_size = 800MB
max_wal_senders 一定要设置大于 0
同时 wal_level 参数设置为 replica 或 logical
最后重启数据库
2.备库配置
pg_basebackup 工具在 /home/postgres/bin目录下
# 110.0.0.100 是主库的ip
# $PGDATA 是环境变量为 /home/postgres/data 可以自定义一个目录
# osdaback 是备份的标识码 可以自定义一个
# -F p 输出格式为原样输出 -P 执行过程中输出备份进度
# -X stream 备份过程中产生的xlog文件也备份出来
pg_basebackup -h 110.0.0.100 -U postgres -F p -P -X stream -R -D $PGDATA -l osdaback
然后输入服务器的数据库的密码
因为使用了 -R 所以会自动生成 standby.signal (在 /home/postgres/data目录下 ) 文件,所以不需要在自己去生成此文件。
12版本前则是自动生成 recovery.conf
启动备库数据库
pg_ctl start
3.检测是否连接
如果备库已经连接主库上,那么在 pg_stat_replication 上可以查询到
select client_addr,state,sync_state from pg_stat_replication
查询到的 state 不是 streaming 也说明有问题,可以查看备库的日志文件查询原因
三.备库还原
1.关闭数据库
2.删去备库的 standby.signal
3.重新启动数据库