731 words
4 minutes
SQL 系列(八):事务日志与备份恢复

AI 智能总结

数据库 8 事务日志与备份恢复#

日志是数据库崩溃恢复基石,备份是数据容灾核心。三类数据库日志命名、备份手段存在明显差异,本文梳理重做日志、归档日志概念,区分冷备、热备、逻辑备份适用场景。

一、核心日志体系#

1. 重做日志(Redo Log)#

作用:保证事务持久性,崩溃后完成数据恢复,三大数据库均有同类机制。

  • MySQL InnoDB:redo log,循环写入,宕机依靠redo完成未刷盘数据恢复。
  • Oracle:联机重做日志(Online Redo Log),循环复用。
  • SQLServer:事务日志(.ldf),兼具undo+redo能力。

2. 归档日志(Archive Log)#

归档日志是重做日志的持久副本,开启后才能支持时间点恢复(PITR)。

  • MySQL:binlog二进制日志,相当于Oracle归档日志;
  • Oracle:Archive Log归档文件,必须开启归档模式;
  • SQLServer:事务日志备份,等同于归档方案。

关键区别:MySQL没有独立Archive Log,依靠binlog实现时间点恢复。

二、四类备份方案#

1. 冷备(离线备份)#

原理:停止数据库服务,直接复制数据文件。 优点:简单稳定;缺点:业务停机,无法满足7×24业务。 适用场景:测试环境、低优先级业务。

2. 热备(在线物理备份)#

数据库持续运行,直接拷贝底层数据文件,不中断业务。

  • MySQL:xtrabackup支持InnoDB热备;
  • Oracle:RMAN热备份;
  • SQLServer:在线完整备份。

3. 逻辑备份#

导出SQL/数据文件,基于数据库接口读取数据,不拷贝原始磁盘文件。

Terminal window
# MySQL逻辑备份示例
mysqldump -u root -p testdb > backup.sql

Oracle:expdp;SQLServer:SSMS导出、bcp工具。
特点:跨平台迁移友好;海量数据下速度慢。

三、故障恢复模式#

  1. 完整备份恢复:仅恢复到备份时间点,丢失备份之后的数据。

  2. 时间点恢复(PITR)
    前提:开启归档日志/binlog。
    流程:完整备份 + 增量日志,恢复至任意故障前时间。

MySQL:全量备份 + binlog回放
Oracle:RMAN备份 + 归档日志
SQLServer:完整备份 + 事务日志备份

四、方言重点差异#

  1. MySQL
    redo用于崩溃恢复;binlog用于主从复制与时间点恢复,二者职责分离。

  2. Oracle
    必须开启归档模式,RMAN为官方首选备份工具;redo循环覆盖,依靠归档防止日志丢失。

  3. SQLServer
    所有操作记录在ldf事务日志,没有独立binlog/归档文件,持续备份日志实现增量恢复。

五、实践规范#

  1. 生产环境禁止只做冷备,线上优先热备+日志持续备份;
  2. 定期执行备份恢复演练,备份文件不代表可用备份;
  3. 逻辑备份适合迁移,海量生产数据库优先物理热备;
  4. 归档/binlog务必持久化到独立存储,防止磁盘故障丢失日志。
SQL 系列(八):事务日志与备份恢复
https://fuwari.vercel.app/posts/sql-series/sql-08-transaction-log-backup/
Author
Zero02
Published at
2025-05-20
License
CC BY-NC-SA 4.0