面试题答案
一键面试逻辑备份保证数据一致性
- 使用事务:在逻辑备份工具开始备份前,启动一个事务。例如在MySQL中,可以使用
START TRANSACTION
语句,这样在事务内读取的数据是一致的视图,直到事务结束,其他事务对数据的修改不会影响到备份过程中的读取。 - 设置一致性快照读:通过设置
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
,可以让备份过程在同一个事务隔离级别下读取数据,保证整个备份过程中读取的数据版本一致。
物理备份保证数据一致性
- 使用FLUSH TABLES WITH READ LOCK(FTWRL):在进行物理备份前执行此命令,它会刷新所有表并锁定,防止其他写入操作,确保备份时数据处于一致性状态。但此操作会阻塞所有读写操作,对业务影响较大。
- 利用InnoDB的热备份能力:如使用XtraBackup工具,它利用InnoDB的日志机制(redo log和undo log),能够在数据库运行时进行备份。备份过程中先拷贝数据文件,然后应用redo log使数据处于最新状态,通过undo log保证数据一致性。
逻辑备份出现不一致的恢复手段
- 重新备份:如果不一致情况不严重,且备份操作相对快速,可以尝试重新进行逻辑备份,确保在备份过程中事务的正确使用和一致性快照读的设置。
- 从备份文件恢复并应用增量:如果有增量备份文件,可以先恢复到最近的完整备份,然后应用增量备份文件。但前提是增量备份记录了从上次完整备份后的数据变化,并且能够正确应用。
物理备份出现不一致的恢复手段
- 应用日志:对于物理备份,如果数据不一致,可以利用redo log和undo log进行恢复。通过应用redo log将备份后发生的修改重新应用到数据文件上,再利用undo log回滚未提交的事务,使数据达到一致性状态。
- 重新备份:若无法通过日志恢复,且物理备份操作相对不频繁,可以重新进行物理备份,确保在备份过程中正确使用FTWRL或利用好热备份工具的特性。