有人能解释mysqldump --single-transaction实际上是如何用于事务性表的吗,比如InnoDB?我读过官方的文档,但仍然没有胶水。它是否像--lock-tables那样执行每个表锁而不是全局锁?另外,mysqldump作为默认选项运行--opt,其中包括--lock-tables,但它们与--single-transaction互斥,如上面的文档链接所述。在单个mysqldump命令中使用--skip-opt时是否应该使用--single-transaction?
我需要转储大小为700 Gb的InnoDB表,并且我正在查找正确的命令来实现这一点。目前,我使用以下一个:
mysqldump -B my_db --quick --single-transaction --max_allowed_packet=512M --compress --order-by-primary提前谢谢。
发布于 2017-01-17 18:51:39
--single-transaction说“转储过程中对InnoDB表的任何更改都不会包含在转储中”。因此,实际上,转储是数据库在转储启动时的快照,而不管转储需要多长时间。
由于锁的交互方式,这将减慢表的速度,甚至可能停止写入。例如,考虑在转储过程中运行ALTER TABLE或DROP TABLE,以及在同一表上的其他操作。
--lock-tables对于MyISAM表很有用。
通常建议使用--opt。我认为这是独立于上述方案的。
发布于 2022-11-12 12:40:33
--single-transaction标志将在运行之前启动事务。这将使mysqldump在事务发生时以当前状态读取数据库,而不是锁定整个数据库,从而形成一致的数据转储。
当一个--single-transaction转储正在处理中时,为了确保一个有效的转储文件(正确的表内容和二进制日志坐标),其他任何连接都不应该使用以下语句: ALTER、CREATE、DROP、RENAME TABLE、TRUNCATE。一致的读取不会与这些语句分离,因此在要转储的表上使用它们会导致mysqldump执行的SELECT检索表内容以获得不正确的内容或失败。
https://stackoverflow.com/questions/41683158
复制相似问题