SQLServer Always On环境的数据库备份
SQL Server的Always on环境的备份规则设置比较混乱,加上一个copy_only备份,更是乱上加乱,copy_only备份实在极少的特殊情况下使用的备份,企业级日常备份,不可能用copy_only备份的,因此这里不讨论copy_only备份。
Backup preference有多重设置,企业级生产环境保持默认就可以,这里以默认设置为例
1、不管怎么设置,正常的数据库备份(full backup、diff backup)只能在主节点进行
2、如果AG正常,Transaction Log备份可以在任何一个节点上执行
3、如果主节点和辅助节点之间的同步断了,辅助节点无法执行日志备份
4、任何节点都支持COPY_ONLY备份,COPY_ONLY备份不能与diff备份或者trans log备份一起恢复数据库,COPY_ONLY备份不能作为日常备份的一个考虑选项。
直观地列出来备份可以允许的规则如下
以这个备份为例:
以时间为步骤
1,主节点上执行完整备份,full backup 1
2,主节点上执行差异备份,diff backup 1
3,从节点1上执行事务日志备份备份,生成transaction log backup 1
4,从节点2上执行事务日志备份备份,生成transaction log backup 2
5,主节点上执行事务日志备份备份,生成transaction log backup 3
可以使用full backup 1 + diff backup 1 + transaction log backup 1 + transaction log backup 2 + transaction log backup 3来实现基于时间点的恢复。
参考下图,以两个Always on节点为例,分别是A和B节点,在完整备份的基础上,分别在A和B节点上执行备份,可以发现transaction log的LSN在始终是连续的。也就是first LSN始终开始于上一次的last LSN,而不管上一次的transaction log备份发生在哪个节点。
实际上在transaction log再不同节点备份的时候,transaction的LSN是连续的,
这意味着:
1,在任何一个节点上执行transaction log备份,都可以作为恢复数据库的一部分使用。
2,在任何一个节点上执行transaction log备份,都“截断”了所有节点的数据库对应的事务日志,事务日志文件可以重用。
ServerA上的transaction log日志使用率
ServerB上的transaction log日志使用率
在任何一个节点上做Transaction log 备份,日志文件的使用情况了都会同步到Always on中的其他节点。因此建议在企业级备份时,在主节点上做full和diff备份,在其中一个固定节点上做transaction log备份。