相关参数
wal_level
wal_level
决定多少信息写入到 WAL 中
参数枚举值
wal_level 参数默认值为 replica ,每个层次包括所有更低层次记录的信息。(级别:minimal<replica<logical)
- minimal :去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录
- replica :写入足够的数据以支持WAL归档和复制,包括在后备服务器上运行只读查询。默认值
- logical :增加支持逻辑解码所需的信息
- 在 9.6 之前的版本中,该参数允许值
archive
和hot_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文件体现图
相关参数说明
- lz4 命令工具用法
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/*