首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysqldump --单事务选项

问Mysqldump --单事务选项
EN

Stack Overflow用户
提问于 2017-01-16 18:49:59
回答 2查看 26.6K关注 0票数 11

有人能解释mysqldump --single-transaction实际上是如何用于事务性表的吗,比如InnoDB?我读过官方的文档,但仍然没有胶水。它是否像--lock-tables那样执行每个表锁而不是全局锁?另外,mysqldump作为默认选项运行--opt,其中包括--lock-tables,但它们与--single-transaction互斥,如上面的文档链接所述。在单个mysqldump命令中使用--skip-opt时是否应该使用--single-transaction?

我需要转储大小为700 Gb的InnoDB表,并且我正在查找正确的命令来实现这一点。目前,我使用以下一个:

代码语言:javascript
复制
 mysqldump -B my_db --quick --single-transaction --max_allowed_packet=512M --compress --order-by-primary

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-17 18:51:39

--single-transaction说“转储过程中对InnoDB表的任何更改都不会包含在转储中”。因此,实际上,转储是数据库在转储启动时的快照,而不管转储需要多长时间。

由于锁的交互方式,这将减慢表的速度,甚至可能停止写入。例如,考虑在转储过程中运行ALTER TABLE或DROP TABLE,以及在同一表上的其他操作。

--lock-tables对于MyISAM表很有用。

通常建议使用--opt。我认为这是独立于上述方案的。

票数 15
EN

Stack Overflow用户

发布于 2022-11-12 12:40:33

--single-transaction标志将在运行之前启动事务。这将使mysqldump在事务发生时以当前状态读取数据库,而不是锁定整个数据库,从而形成一致的数据转储。

当一个--single-transaction转储正在处理中时,为了确保一个有效的转储文件(正确的表内容和二进制日志坐标),其他任何连接都不应该使用以下语句: ALTER、CREATE、DROP、RENAME TABLE、TRUNCATE。一致的读取不会与这些语句分离,因此在要转储的表上使用它们会导致mysqldump执行的SELECT检索表内容以获得不正确的内容或失败。

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

https://stackoverflow.com/questions/41683158

复制
相关文章

相似问题

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