PostgreSQL 异步流备份同步

描述

主数据库产生日志(WAL),备数据库通过读取主数据库的日志(WAL),进行同步

设定

主数据库

  • 地址:1.1.1.1
  • 用户:backup
  • 密码:123456

备数据库

  • 地址:2.2.2.2

#准备

  1. 关闭主备数据库

  2. 复制主数据库到备数据库

  • 方法一
    直接复制主数据文件覆盖备数据文件

#配置主服务器

编辑postgresql.conf

#建立WAL归档

wal_level=archive
#决定多少信息写入到 WAL 中,设置archive或更高
archive_mode=on
#设置为on
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
#%p表示归档源路径,%f表示归档复制后的名字
#需要修改的是其中的/mnt/server/archivedir/:表示将归档复制到哪里。注意,归档包含了数据库的所有信息,避免泄露。

#开启流复制

max_wal_senders=4
#设置一个数,表示最多能有几个流复制,不能大于max_connections。默认为0,禁止流复制
wal_keep_segments=16
#设置一个足够大的数,表示多少旧WAL归档会保留。默认为0,不保存。建议不要设置为0

添加用户
例如添加用户名:backup,密码:123456

编辑pg_hba.conf,设置备份用户访问规则

#添加一条

host    replication     backup          0.0.0.0/0                md5
#host;表示采用ip连接方式
#replication;备用专用数据库
#backuo;负责备份的账户
#0.0.0.0/0;允许连接到这个服务器的IP
#md5;需要提供账户密码

配置备数据库

在备数据文件夹中新建recovery.conf,加入这些

standby_mode = 'on'
#启动待机模式
primary_conninfo = 'host=1.1.1.1 port=5432 user=backuo password=123456'
#设置连接信息,连接到主数据库

#下面和上面的连接方式可以只选一项,如果备数据库不能访问主数据库文件,则可以不写入下面的选项

restore_command = 'cp /mnt/server/archivedir/%f %p'
archive_cleanup_command = 'pg_archivecleanup /path/to/archive %r'
#设置主数据库的归档,导入归档

编辑postgresql.conf

hot_standby = on
#设置为on,否则备数据库在同步主数据库时将无法进行读取使用

启动主数据库

1.尝试修改数据,观察/mnt/server/archivedir/有无文件产生,确保 WAL 归档正常产生 2.查看进程,有无postgres: wal sender process ...

启动备数据库

1.查看进程,有无postgres: wal receiver process ...

#参考