pg中如何正确设置归档
作者简介:王旭,在数据库管理方面拥有10多年经验。精通主流数据库系统,在企业数据库管理、性能优化、架构设计和高可用性能解决方案方面拥有丰富得实践经验。目前拥有(ORACLE ACE、MYSQL OCP、PG ACE、PGCA、PGCE、PGCM)等数据库认证。
归档设置介绍
生产中我们需要对数据库做热备,如手工热备、pg自带热备、三方工具热备。流复制很多人以为也要开归档,实际上不需要,以前文章有些,相比oracle、mysql就方便很多;
//pg中归档设置有那些参数?
1)archive_mode = on
2)archive_command = ''
3)archive_timeout = 0
archive_mode,归档打开控制开关,默认off,on就是说打开归档,和oracle中startup mount后执行alter database archive log; 一个意思。只不过oracle是在一致性关库后进入mount时候设置,而pg是在参数文件或者命令行使用alter system设置,设置后,重启实例生效。
archive_command为归档的目的地,默认是空'',如果和oracle比较,那么就是log_archive_dest或者log_archive_dest_x或者闪回区;这个是进一步控制归档的目的地,这个参数不需要重启生效,修改后执行pg_ctl reload -D xx或者select pg_reload_conf();。
archive_timeout,控制归档时间,默认为0,就是禁用,如果设置了大于0 ,那么归档只要到达xx秒就会触发自动切换归档的命令;和oracle中的archive_lag_target一个意思,这个参数不需要重启生效。
//在很多时候,我们实施项目,初始化一套库,可能很容易忘记打开归档,或者一时没有计划好备份这些事情,就导致业务量增加的同时,热备无法配置,只有停机修改上述的归档参数。那么有没有一种办法,在初始化的时候不用考虑归档的目的地,然后把归档给打开呢?答案是可以,通过设置假归档处理。
初始化的时候还是设置archive_mode = on 在windows中,我们把archive_command设置为'echo ""' 在linux中,我们把archive_command设置为'/bin/true'
具体配置演示
windows只设置archive_mode=on,archive_command=''的情况
设置参数 
重启实例

查看参数情况

查看当前在用wal日志


查看wal目录归档记录状态(1d是已经归档,那么上面在用的1e是没归档的)

执行日志切换,看归档状态是否正常,正常为.done,不正常为.ready.

通过设置,发现不正常,无法归档,那我能不能将archive_command由'' 修改为有值的呢?我们试下,通过实验是可以的。


总结
windows和linux在安装的时候都需要将archive_mode打开。 基于不同的操作系统,我们可以使用假归档方式。为后续真归档提供不停机的条件。




