MySQL备份期间INSERT会发生什么?

时间:2013-08-07 06:44:36

标签: mysql database database-backups

假设备份需要15分钟,那么在MySQL备份期间INSERT查询会发生什么?它最终会在备份中吗?新行怎么了?

我在接受采访时被问到这个问题。

2 个答案:

答案 0 :(得分:1)

在这种情况下,备份可能不一致。您可以锁定表格以防止这种情况发生。如果无法锁定表,则可以设置主从复制。奴隶可以被锁定并在解锁后获得最新的更改。

答案 1 :(得分:1)

使用mysqldump,这实际上取决于您使用的选项。 --opt标记很常见(一组选项的简写)并包含--lock-tables,根据文档:

  

对于每个转储数据库,在转储之前锁定要转储的所有表   他们。使用READ LOCAL锁定表以允许并发   在MyISAM表的情况下插入。对于事务表,例如   InnoDB, - 单一交易比一个更好的选择   --lock-tables因为它根本不需要锁定表。

因此,如果您根本没有锁定,则可能会出现不一致的表格。如果使用--lock-tables,则可能存在不一致的数据库。

这还取决于您使用的是MyISAM还是InnoDB。

如果您要从奴隶进行备份,--lock-all-tables是更好的选择。

通常,锁定任何生产数据库都是糟糕的主意

你还应该记住,从奴隶的备份也可能是危险的!您必须监视从属复制进度并确保它不会失去同步。如果复制从属设备使用“MIXED”或“STATEMENT”模式,则副本本身可能与主服务器不一致,具体取决于所使用的查询(检查错误日志)。

还有option to do a "hot backup" with XtraDB,InnoDB的改进版本。

有些人也delayed replicationMySQL backup methods上还有一个页面。

对于备份过程中插入的行会发生什么:如果表被锁定,IN​​SERT / UPDATE / DELETE查询将挂起,如果锁定持续时间过长,则最终会超时。超时间隔取决于配置。

我强烈建议您仔细阅读mysqldump documentation