32人参与 • 2025-11-28 • MsSqlserver
-- archive_mode 控制是否启用 wal 归档 archive_mode = on|off|always
| 选项 | 描述 | 使用场景 | 重启要求 |
|---|---|---|---|
| off | 禁用归档 | 开发/测试环境 | 不需要 |
| on | 启用归档 | 生产环境、主节点 | 需要重启 |
| always | 总是归档 | 备用服务器、所有节点 | 需要重启 |
archive_mode = off
-- 禁用 wal 归档 - 不执行 archive_command - 不保留归档的 wal 文件 - 只能进行完整备份,不能进行 pitr - 节省磁盘空间和 i/o 开销
# 适用于: # - 开发/测试环境 # - 不需要时间点恢复的环境 # - 磁盘空间有限的场景 # - 临时数据库 # 配置示例 echo "archive_mode = off" >> /var/lib/postgresql/14/main/postgresql.conf
archive_mode = on
-- 启用 wal 归档 - 执行 archive_command 归档完成的 wal 文件 - 支持时间点恢复 (pitr) - 支持基于 wal 的备份策略 - 在主服务器上正常工作 - 在备用服务器上不归档
# postgresql.conf - on 模式配置 archive_mode = on wal_level = replica # 必须为 replica 或 logical archive_command = 'cp %p /archive/%f' # 必须设置归档命令 # 可选配置 archive_timeout = 300 # 归档超时(秒)
# 适用于: # - 生产环境主节点 # - 需要时间点恢复的环境 # - 基于 wal 的备份策略 # - 高可用集群的主节点
archive_mode = always
-- 总是启用 wal 归档 - 在主服务器和备用服务器上都执行归档 - 备用服务器也归档其接收的 wal - 支持级联复制环境中的归档 - 增加备用服务器的 i/o 负载
# postgresql.conf - always 模式配置 archive_mode = always wal_level = replica # 必须为 replica 或 logical archive_command = 'cp %p /archive/%f' # 必须设置归档命令 # 在备用服务器上还需要 hot_standby = on
# 适用于: # - 级联复制环境 # - 所有节点都需要归档的集群 # - 备用服务器也需要 pitr 能力的环境 # - 多层级备份架构
-- 查看当前 archive_mode 设置
select name, setting, unit, context, pending_restart
from pg_settings
where name = 'archive_mode';
name | setting | unit | context | pending_restart
--------------+---------+------+------------+-----------------
archive_mode | on | | postmaster | f
(1 row)
-- 检查归档相关参数
select name, setting, pending_restart
from pg_settings
where name in ('archive_mode', 'wal_level', 'archive_command', 'archive_timeout');-- 检查归档统计信息
select * from pg_stat_archiver;
-- 输出示例:
archived_count | last_archived_wal | last_archived_time | failed_count | last_failed_wal | last_failed_time | stats_reset
----------------+--------------------------+-------------------------------+--------------+-----------------+------------------+-----------------------
--------
451 | 0000000100000001000000d9 | 2025-11-27 17:49:22.393339+08 | 0 | | | 2025-11-25 09:03:40.58
2174+08
(1 row)
-- 检查未归档的 wal 文件
select count(*) as pending_archive
from pg_ls_archive_statusdir()
where name like '%.ready';# 开发环境 - 禁用归档 archive_mode = off wal_level = minimal archive_command = ''
# 生产主节点 - 启用归档 archive_mode = on wal_level = replica archive_command = 'test ! -f /var/lib/postgresql/wal_archive/%f && cp %p /var/lib/postgresql/wal_archive/%f' archive_timeout = 300 max_wal_senders = 10
# 备用节点 - 总是归档 archive_mode = always wal_level = replica archive_command = 'test ! -f /var/lib/postgresql/wal_archive/%f && cp %p /var/lib/postgresql/wal_archive/%f' archive_timeout = 300 hot_standby = on max_wal_senders = 5
# 主节点配置 archive_mode = on wal_level = replica archive_command = 'rsync -av %p backup-server:/wal_archive/%f' # 备用节点配置 (可能升级为主节点) archive_mode = always wal_level = replica archive_command = 'rsync -av %p backup-server:/wal_archive/%f' hot_standby = on
# 1. 修改 postgresql.conf echo "archive_mode = on" >> /var/lib/postgresql/14/main/postgresql.conf # 2. 设置归档命令(如果启用归档) echo "archive_command = 'cp %p /archive/%f'" >> /var/lib/postgresql/14/main/postgresql.conf # 3. 确保 wal_level 正确 echo "wal_level = replica" >> /var/lib/postgresql/14/main/postgresql.conf # 4. 重启 postgresql(从 off 到 on/always 需要重启) systemctl restart postgresql # 5. 验证修改 psql -c "select name, setting from pg_settings where name = 'archive_mode';"
-- 重要提醒: -- 1. 从 off 切换到 on/always 需要重启 postgresql -- 2. 从 on/always 切换到 off 需要重启 postgresql -- 3. 启用归档必须设置有效的 archive_command -- 4. 启用归档要求 wal_level = replica 或 logical -- 5. 确保归档目录存在且有正确权限 -- 检查是否需要重启 select name, setting, pending_restart from pg_settings where name = 'archive_mode' and pending_restart;
到此这篇关于postgresql的 archive_mode 参数详解的文章就介绍到这了,更多相关postgresql archive_mode 参数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论