PG-配置归档模式

相关参数

wal_level

wal_level决定多少信息写入到 WAL 中

参数枚举值

wal_level 参数默认值为 replica ,每个层次包括所有更低层次记录的信息。(级别:minimal<replica<logical)

  • minimal :去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录
  • replica :写入足够的数据以支持WAL归档和复制,包括在后备服务器上运行只读查询。默认值
  • logical :增加支持逻辑解码所需的信息
  • 在 9.6 之前的版本中,该参数允许值archivehot_standby。现在仍然接受这些值,但是它们会被映射到replica

archive_mode

控制数据库归档模式:off, on, or always。wal_level被设置为minimal时,archive_mode不能被启用

  • off: 默认值,不开启归档WAL
  • on: 启用归档WAL,通过设置 archive_command 命令将完成的WAL 段发送到归档目录。
  • always: 在普通操作期间,on和always 两种模式没有区别。在always模式下,所有从归档中恢复的或者用流复制传来的文件将被(再次)归档

archive_command

调用服务器上本地shell或工具命令,用于归档一个完成的WAL文件。该参数仅在启用了archive_mode时生效,否则它将会被忽略。

如果archive_mode被启用时,archive_command是一个空字符串(默认),WAL 归档的操作会被临时禁用,但仍会继续累计WAL文件链。

参数值模式匹配

  • %p:指定的参数字符串值中的任何%p被替换成要被归档的文件的路径名
  • %f:指定的参数字符串值中的任何%f只被文件名替换(路径名是相对于数据目录)

如果要在命令里嵌入一个真正的%字符,可以使用%%

archive_cleanup_command

指定一个shell命令,用于清理不需要的已归档WAL文件。通常使用pg_archivecleanup模块清理过时的已归档文件。

archive_cleanup_command = 'pg_archivecleanup /mnt/archivedir %r'

开启数据库归档模式

检查当前配置

查看pg的数据目录

SHOW data_directory;

查看pg的归档情况

show archive_mode;

开启WAL归档

任何数据的修改首先写入WAL日志,然后才对数据文件进行修改。PostgreSQL在数据集簇目录的$PGDATA/pg_wal/子目录下存储预写式日志(WAL)。

启用WAL归档,需设置wal_level配置参数为replica或更高(级别:minimal<replica<logical),设置archive_mode为on,并且使用archive_command配置参数指定一个shell命令。在archive_command中,%p会被将要归档的文件路径所替代,而%f只会被文件名所替代(路径名是相对于当前工作目录而言的,即集簇的数据目录)

创建归档目录

mkdir -p /ups/data/pgdata/12/arch_wal
chown postgres:postgres /ups/data/pgdata/12/arch_wal

修改wal_level参数

# 1.1 vi postgresql.conf
wal_level = 'replica'

# 1.2 SQL命令方式修改
psql -c "ALTER SYSTEM SET wal_level = 'replica';"

修改archive_mode参数

# 1.1 vi postgresql.conf
archive_mode = 'on'

# 1.2 SQL命令方式修改
psql -c "ALTER SYSTEM SET archive_mode = 'on';"

修改archive_command参数

非压缩参数
# 1.1 vi postgresql.conf
archive_command = 'cp %p /ups/data/pgdata/12/arch_wal/%f'

# 1.2 SQL命令方式修改
psql -c "ALTER SYSTEM SET archive_command = 'cp %p /ups/data/pgdata/12/arch_wal/%f';"
lz4 压缩归档参数
vi $PGDATA/postgresql.conf
archive_command = 'test ! -f %p && /bin/lz4 -q -z %p /ups/data/pgdata/12/archive_wals/%f.lz4'

# 1.2 SQL命令方式修改
psql -c "ALTER SYSTEM SET archive_command = 'test ! -f %p && /bin/lz4 -q -z %p /ups/data/pgdata/12/archive_wals/%f.lz4';"
压缩归档wal文件体现图

image-20210918101156587

相关参数说明
  • lz4 命令工具用法

image-20210918100344445

gzip 压缩的归档日志

适用压缩归档wal日志文件

-- 使用gzip来压缩归档文件
archive_command = 'gzip < %p > /var/lib/pgsql/archive/%f'
-- 使用gunzip恢复
restore_command = 'gunzip < /mnt/archivedir/%f > %p'

重启PG服务

sudo systemctl restart postgresql12 
sudo systemctl status -l postgresql12 

检查确认

切换日志
select pg_switch_wal();
检查归档目录及其归档文件列表
ls -l /ups/data/pgdata/12/archive_wals/*
原文地址:https://www.cnblogs.com/binliubiao/p/15308263.html