Mysqldump --单一交易选项

ehxuflar  于 2022-11-21  发布在  Mysql
关注(0)|答案(2)|浏览(152)

有人能解释一下 mysqldump--single-transaction实际上是如何处理事务性表的吗?我读过官方文档,但还是没有读过。它是否像--lock-tables那样执行每个表的锁而不是全局锁?另外,mysqldump将--opt作为默认选项运行,它包含--lock-tables。但它们与--single-transaction互斥,如上面的文档链接所述。在单个 mysqldump 命令中使用--single-transaction时,我应该使用--skip-opt吗?
我需要转储InnoDB表的大小~700 Gb,我正在寻找正确的命令来实现这一点。目前我使用下面的一个:

mysqldump -B my_db --quick --single-transaction --max_allowed_packet=512M --compress --order-by-primary

先谢谢你。

yi0zb3m4

yi0zb3m41#

--single-transaction表示“转储期间InnoDB表发生的任何更改都不会包含在转储中”。因此,转储实际上是转储 * 开始 * 时的数据库快照,而不管转储花费多长时间。
由于锁的交互方式,这将减慢表的速度,甚至可能暂停写入。例如,在转储期间运行ALTER TABLEDROP TABLE,同时对同一个表执行其他操作。
--lock-tables对于MyISAM表很有用。
--opt通常是建议的,我认为它独立于上述选项。

wpx232ag

wpx232ag2#

--single-transaction标志将在运行之前启动一个事务,而不是锁定整个数据库,这将使mysqldump在事务发生时以当前状态读取数据库,从而实现一致的数据转储。
--single-transaction转储正在进行时,为确保转储文件有效(正确得表内容与二进制日志坐标),任何其它连接都不应使用以下语句:ALTER TABLE、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE。一致读取与这些语句并不隔离,因此在要转储的表上使用这些语句可能会导致mysqldump执行的SELECT检索表内容时获得不正确的内容或失败。

相关问题