假设备份需要15分钟,那么在MySQL备份期间INSERT
查询会发生什么?它最终会在备份中吗?新行怎么了?
我在接受采访时被问到这个问题。
答案 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 replication。 MySQL backup methods上还有一个页面。
对于备份过程中插入的行会发生什么:如果表被锁定,INSERT / UPDATE / DELETE查询将挂起,如果锁定持续时间过长,则最终会超时。超时间隔取决于配置。
我强烈建议您仔细阅读mysqldump documentation。