主备切换后日志自动归档必须立即生效:启用归档模式、确保归档路径存在可写、启动自动归档进程,并统一命名规则、手动触发首次归档、同步更新监控与清理配置。

主备切换后日志自动归档的配置,核心在于确保新主库立即启用归档、归档路径可用、归档进程正常启动,并与原主库归档策略对齐。不同系统实现方式不同,但逻辑一致:切换不是终点,归档连续性才是关键。
主备切换后归档必须自动生效
主备切换(如 Oracle DG 切换、MySQL MHA 故障转移、达梦同步备库升主)完成后,原备库成为新主库。此时它默认不自动开启归档模式,也不会继承原主库的归档配置。若未及时配置,新主库将运行在 NOARCHIVELOG 模式(或归档路径失效),导致重做日志被覆盖,失去时间点恢复能力。
必须在切换完成后的第一时间验证并补全以下三项:
- ✅ 归档模式已启用:
ALTER DATABASE ARCHIVELOG;(Oracle)或SET GLOBAL log_bin = ON;+ 配置log_archive_dest(MySQL 8.0.33+ 支持归档日志插件) - ✅ 归档目标路径存在且可写:如
/dmdata/arch(达梦)、+FRA或/u01/arch(Oracle),需属主为数据库用户(如dmdba、oracle),权限750 - ✅ 自动归档已启动:Oracle 查
ARCHIVE LOG LIST确认Automatic archival: Enabled;达梦查SELECT * FROM V$DM_INI WHERE PARA_NAME = 'ARCH_INI';确保为1
配置归档路径与命名规则,适配新主身份
切换后,归档路径建议不依赖主机名硬编码,避免因主机角色变化导致路径不可用。推荐方式:
- 使用统一共享存储路径(如 NAS 或 SAN 卷),主备共用同一
LOG_ARCHIVE_DEST_1 - 若用本地路径,通过符号链接解耦:
# 在新主库上执行(假设原路径是 /arch/oldhost,现需指向新逻辑路径) rm -f /arch/current ln -s /arch/dmdb_server2 /arch/current
- 归档文件名格式统一(如 Oracle 的
LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'),确保日志序列号(%s)和重置ID(%r)连续可识别,便于后续恢复
切换后自动触发归档初始化(避免首日无归档)
刚升主时,重做日志可能尚未发生切换,ARCn 进程不会主动归档当前联机日志。需手动触发一次归档,确保归档链起始:
- Oracle:
ALTER SYSTEM ARCHIVE LOG CURRENT; - 达梦:
ALTER DATABASE ARCHIVE LOG CURRENT; - PostgreSQL(基于 WAL):
SELECT pg_switch_wal();
建议将该命令嵌入切换后检查脚本中,作为自动化流程最后一步。
同步更新监控与告警配置
主备切换后,原有监控项(如“归档目录剩余空间”“最近归档时间”)仍指向旧主地址,需同步变更:
- 修改 Zabbix/Nagios 监控项目标主机为新主库 IP
- 更新日志归档时间戳校验逻辑:读取
/arch/current/下最新.arc或.wal文件的mtime,对比当前时间是否超 15 分钟 - 若使用 logrotate 管理归档日志文件(如归档目录下的压缩清理),需确认其配置文件(如
/etc/logrotate.d/dm-arch)已部署到新主,并测试:logrotate -f /etc/logrotate.d/dm-arch
归档连续性不是切换成功的附加项,而是切换有效的必要条件。配置到位后,新主库应像原主一样,每完成一次日志切换就自动生成一份归档,无需人工干预。

















