为了降低备份对数据库的性能影响,我们在有standby的情况下,可以选择从standby备份postgresql。
pg_rman是一个备份工具,同样支持从standby备份数据库,但是有一些使用的注意事项。
例如需要连接主库,需要能读取归档目录,需要告诉主库和备库的连接地址,需要备库的$pgdata等等。
pg_rman需要连接到主库执行pg_start_backup,pg_stop_backup。
同时需要连接到standby数据库查看pg_last_xlog_replay_location(),检查是否已恢复到pg_start_backup返回的lsn,然后才能开始备份。
因为postgresql 9.5以前的版本,备库是不会产生归档的,所以如果从备库备份,必须确保pg_rman能访问备库postgresql.conf中配置的archive_command所指定的归档目录,或在pg_rman.ini中配置的arclog_path。
并且确保arclog_path所在的位置正是主库的归档写入位置。
通常这需要一个主备共享的归档位置,例如分布式文件系统,或主备都能访问的nfs。
如果你使用的是9.5或者更新的版本,那么可以配置备库的 archive_mode=always,让备库也产生归档
另外,备份是从standby的$pgdata拷贝文件的,所以你需要告诉pg_rman standby的$pgdata位置。
postgresql.conf
recovery.conf
指定备库$pgdata以及备份目录
如果arclog_path目录不是主库的归档目录,需要修改一下。(指postgresql < 9.5的版本)
方法举例
1. 修改postgresql内核,让备库支持归档(指postgresql < 9.5的版本)
2. 主备使用分布式文件系统或共享的nfs作为归档目录(指postgresql < 9.5的版本)
3. 主备分别开启nfs server服务,并且相互mount对方的归档目录(指postgresql < 9.5的版本)
4. 改造pg_rman, 让它可以从pg_xlog目录备份需要的redo文件(可能需要流式备份,否则频繁产生redo的大库xlog容易被删除或覆盖)(指postgresql < 9.5的版本)
那么pg_rman只要能访问到真正的归档位置即可。 (指postgresql < 9.5的版本)
<a href="http://info.flagcounter.com/h9v1">count</a>