PostgreSQL 异步流备份同步
描述
主数据库产生日志(WAL),备数据库通过读取主数据库的日志(WAL),进行同步
设定
主数据库
- 地址:1.1.1.1
- 用户:backup
- 密码:123456
备数据库
- 地址:2.2.2.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 ...
#参考