有人可以解释 mysqldump --single-transaction
如何实际用于事务表,比如InnoDB吗?我已经阅读了官方documentation,但仍然没有胶水。是--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
提前致谢。
答案 0 :(得分:7)
--single-transaction
说“在转储期间InnoDB表中没有发生的任何更改都将包含在转储中”。因此,无论转储采用多长时间,转储都是转储启动时的数据库的快照。
由于锁的交互方式,这会降低表的速度,甚至可能会停止写入。例如,考虑在转储期间运行ALTER TABLE
或DROP TABLE
,以及在同一个表上运行其他操作。
--lock-tables
对MyISAM表非常有用。
--opt
。我认为它独立于上述选项。