pg_control文件包含检查点的基本信息,因此它对于数据库恢复必不可少。如果损坏或者无法读取,则无法启动恢复过程,从而无法获得起点。
pg_controldata D:\PGDATA ##切换WAL日志 postgres=# select pg_switch_wal(); pg_switch_wal --------------- 0/12000000 (1 行记录) postgres=# select pg_current_wal_insert_lsn(); pg_current_wal_insert_lsn --------------------------- 0/12000148 postgres=# select pg_walfile_name('0/12000000'); pg_walfile_name -------------------------- 000000010000000000000011 (1 行记录)
复制
WAL段切换条件:
(1)WAL段文件已经被写满
(2)函数pg_switch_wal()被调用
(3)启用了archive_mode,且已经超过archive_timeout配置的超时时间
切换过的文件会被重命令或者重用以供未来使用。
打开归档
----对postgresql.conf文件编辑,如下设置:
wal_level = replica
archive_mode = on
archive_command = ‘DIR=/opt/pg_arch/date +%F
; test ! -d DIR && mkdir -p DIR; chmod 755 DIR; test ! -f DIR/%f && cp %p DIR/%f; chmod 755 DIR/%f’ ####对归档进行按天分类
非主库清理归档配置
archive_cleanup_command = ‘pg_archivecleanup -d /opt/pg_arch/date +%F
%r 2>>cleanup.log’
wal_level
wal_level 参数默认值为 replica ,每个层次包括所有更低层次记录的信息。(级别:minimal<replica<logical)
minimal —— 不能通过基础备份和wal日志恢复数据库。
replica —— 该级别支持wal归档和复制。
logical —— 在replica级别的基础上添加了支持逻辑解码所需的信息。
archive_mode
off —— 默认值,不开启归档WAL
on —— 启用归档WAL,通过设置 archive_command 命令将完成的WAL 段发送到归档目录。
always —— 从归档中恢复的或者用流复制传来的文件将被(再次)归档
archive_command
调用服务器上本地shell或工具命令,用于归档一个完成的WAL文件。该参数仅在启用了archive_mode时生效,否则它将会被忽略。
当 archive_mode 被启用时,archive_command为设置值时,WAL 归档的操作会被临时禁用。
%p:指定的参数字符串值中的任何%p被替换成要被归档的文件的路径名
%f:指定的参数字符串值中的任何%f只被文件名替换(路径名是相对于数据目录)
archive_cleanup_command
指定一个shell命令,用于清理不需要的已归档WAL文件。通常使用pg_archivecleanup模块清理过时的已归档文件。
archive_cleanup_command = ‘pg_archivecleanup /mnt/archivedir %r’