Mysqldump --单事务选项

问题描述 投票:0回答:2

有人可以解释一下 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

提前致谢。

mysql database transactions innodb
2个回答
21
投票

--single-transaction
表示“转储期间 InnoDB 表发生的任何更改都不会包含在转储中”。因此,实际上,转储是转储开始时数据库的快照,无论转储需要多长时间。

由于锁交互的方式,这会减慢表的速度,甚至可能停止写入。例如,考虑在转储期间运行

ALTER TABLE
DROP TABLE
,以及同一张表上的其他操作。

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

通常建议使用

--opt
。我认为它与上述选项无关。


5
投票

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

在进行

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

© www.soinside.com 2019 - 2024. All rights reserved.