当使用--single-transaction和-快速选项使用mysqldump时,有人能澄清用于创建初始快照的锁的持续时间吗?
我在数据库(InnoDB)中有一个大表(16 in,1.01亿行),启用了二进制日志记录。我在这张表上没有使用任何FK约束。
为了使BIN日志文件计数易于管理,我需要定期更新mysqldump种子。我希望能够运行mysqldump,而我的服务继续添加新记录(大约35/秒)。
根据MySQL文档:创建快照时会发生锁,您可以继续写入表。那么这是即时的,还是取决于桌子的大小?也就是说,需要在释放锁之前读取整个内容。
我担心,在生成快照时,我将无法写入表。
有人能澄清一下表转储开始时会发生什么吗?很高兴看到一个描述该过程的链接。
发布于 2017-10-03 19:46:53
当您使用--single-transaction和--master-data时,mysqldump在开始时执行以下操作。
FLUSH TABLES;
FLUSH TABLES WITH READ LOCK;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */;
SHOW MASTER STATUS;
UNLOCK TABLES;在所有这些都完成之后,实际的备份就开始了。锁是必需的,这样SHOW MASTER STATUS才能准确返回事务开始的正确的binlog坐标。
备份不应阻止写入,也不应阻止备份;然而,在FLUSH语句完成之前,需要提交或回滚现有事务,这些事务可以与已建立的事务进行交互,以便新事务停止等待任何仍处于打开状态的旧事务。但当这些旧交易结束时,这个问题就会自行解决。如果您没有离开长期运行的事务(就像您不应该的那样),您应该没有问题。
https://stackoverflow.com/questions/46536728
复制相似问题