假设备份需要15分钟,那么INSERT查询在MySQL备份期间会发生什么情况?它会在后援中结束吗?新的行发生了什么?
我在一次面试中被问到这个问题。
发布于 2013-08-07 07:01:27
使用mysqldump,它实际上取决于您使用的选项。--opt标记很常见(一堆选项的简写),包含--lock-tables,根据文档:
对于每个转储数据库,在转储表之前锁定要转储的所有表。这些表使用READ锁定,以便在MyISAM表的情况下允许并发插入。对于诸如InnoDB这样的事务性表,-单事务比-锁定表要好得多,因为它根本不需要锁定表。
因此,如果您根本没有锁定,您可以有不一致的表。如果使用--lock-tables,则可能有不一致的数据库。
这还取决于您使用的是MyISAM还是InnoDB。
如果您是从一个奴隶备份,--lock-all-tables是一个更好的选择。
通常,锁定任何生产数据库都是的坏主意,。
你还应该记住,从奴隶备份也可能是危险的!您必须监视从复制过程,并确保它不会失去同步。如果复制从服务器使用“混合”或“语句”模式,则副本本身可能与主服务器不一致,这取决于所使用的查询(检查错误日志)。
还有一个使用XtraDB执行“热备份”的选项,一个InnoDB的改进版本。
有些人还会做延迟复制。在MySQL备份方法上也有一个页面。
至于备份过程中插入的行发生了什么:如果表被锁定,插入/更新/删除查询将挂起,如果锁定时间过长,最终会超时。超时间隔取决于配置。
我强烈建议仔细阅读mysqldump文档。
发布于 2013-08-07 06:46:45
在这种情况下,备份可能不一致。您可以锁定您的表以防止这种情况发生。如果无法锁定表,则可以设置主从复制。奴隶可以被锁定,并在解锁后获得最新的更改。
https://stackoverflow.com/questions/18096397
复制相似问题