假设您每天拍摄整个服务器的快照(public_html、sql 文件等),以便以后在系统故障时恢复。
如果在发生未提交事务时拍摄快照,是否可以恢复损坏的 MySQL InnoDB?还是 InnoDB 会做得很好并在恢复时丢弃“不完整”的事务?
假设您每天拍摄整个服务器的快照(public_html、sql 文件等),以便以后在系统故障时恢复。
如果在发生未提交事务时拍摄快照,是否可以恢复损坏的 MySQL InnoDB?还是 InnoDB 会做得很好并在恢复时丢弃“不完整”的事务?
从数据库的角度来看,我们正在处理不干净的关闭(即电源关闭)和丢失的连接,因此它将丢弃所有未提交的事务。
如果您正在拍摄服务器的快照,就像在低温睡眠中冻结所有内容一样,那么在恢复后数据库将醒来并期待与不存在的应用程序对话。
我能看到的唯一问题不是来自事务本身,而是来自数据库本身驻留在文件中的事实。如果您冻结了一半写入磁盘的文件怎么办。我可以看到这可能是一个问题。另一方面,可能有一些架构设计可以防止这种情况发生,因为停电也是如此,数据库也应该能够承受这种情况。
据我所知,在事务期间,在提交发生之前没有任何内容保存到数据库中。这就是 ACID 合规性。因此,只有在事务之后才写入数据库文件。
另外,在我看来,数据库“快照”应该通过转储来完成。我不是服务器管理员,所以我不知道事实,但以这种方式恢复数据会更安全。
虽然 MySQL 对我来说是一个灰色地带,但我对 SQL Server 更有信心,所以不要把这当作事实,因为 SQL Server 有自己的备份方式。