连续归档和时间点恢复(PITR)
连续归档设置
所谓WAL日志归档,其实就是把在线的WAL日志备份出来。
要启用WAL归档,需设置wal_level配置参数为replica或更高,设置archive_mode为on,并且使用archive_command配置参数指定一个shell命令。
在pg中配置归档的方法就是配置参数archive_command,参数的配置值是一个Unix命令。此命令把WAL日志文档拷贝到其他的地方。例:
archive_command = ‘cp %p /backup/pgwal/%f’;
//cp 命令。实际执行时,pg会把%p 替换成实际的在线WAL日志文件的全路径名,并把%f替换成不包括路径的WAL日志名。
最后被执行的时候是下面这样:
cp pg_wal/00000001000000A900000065 /backup/pgwal/00000001000000A900000065
对每一个将要被归档的新文件都会生成一个类似的命令。
我们也可以归档到远程计算机:
archive_command ='scp %p postgres@192.168.100.100:/backup/pgwal/%f';
什么情况下会触发归档?
建立归档后,什么情况下会触发归档?
方法一:手动切换 WAL 日志
PostgreSQL 提供 pg_switch_xlog() 函数可以手工切换 WAL 日志,如下:
--手动归档
Type "help" for help.
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/87000000
(1 row)
备注:执行 pg_switch_xlog() 后,WAL 会切换到新的日志,这时会将老的 WAL日志归档
方法二:WAL 日志写满后触发归档
WAL 日志被写满后会触发归档,文档在说明配置参数 archive_command 时的第一句说就说明了这点, WAL 日志文件默认为 16MB,这个值可以在编译 PostgreSQL 时通过参数 “–with-wal-segsize” 更改,编译后不能修改。
方法三:设置 archive_timeout
另外可以设置archive 超时参数 archi