首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行mysqldump时写入大表--单事务处理--快速

在运行mysqldump时写入大表--单事务处理--快速
EN

Stack Overflow用户
提问于 2017-10-03 03:20:00
回答 1查看 542关注 0票数 0

当使用--single-transaction-快速选项使用mysqldump时,有人能澄清用于创建初始快照的锁的持续时间吗?

我在数据库(InnoDB)中有一个大表(16 in,1.01亿行),启用了二进制日志记录。我在这张表上没有使用任何FK约束。

为了使BIN日志文件计数易于管理,我需要定期更新mysqldump种子。我希望能够运行mysqldump,而我的服务继续添加新记录(大约35/秒)。

根据MySQL文档:创建快照时会发生锁,您可以继续写入表。那么这是即时的,还是取决于桌子的大小?也就是说,需要在释放锁之前读取整个内容。

我担心,在生成快照时,我将无法写入表。

有人能澄清一下表转储开始时会发生什么吗?很高兴看到一个描述该过程的链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 19:46:53

当您使用--single-transaction--master-data时,mysqldump在开始时执行以下操作。

代码语言:javascript
复制
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语句完成之前,需要提交或回滚现有事务,这些事务可以与已建立的事务进行交互,以便新事务停止等待任何仍处于打开状态的旧事务。但当这些旧交易结束时,这个问题就会自行解决。如果您没有离开长期运行的事务(就像您不应该的那样),您应该没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46536728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档