我正在使用 mysqldump 在完全由 InnoDB 表组成的模式上执行定期备份。mysqldump 文档有这样的说法--single-transaction
:
--single-transaction 选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会导致任何未决事务被隐式提交。
然而,这里(以及堆栈交换网络上的其他地方)大约有 1 亿篇博客文章和答案推荐:
mysqldump --single-transaction --skip-lock-tables my_database > my_database.sql
如果这两个选项是互斥的,我认为指定--single-transaction
应该就足够了。然而,文档也说明了这一点--opt
:
此选项默认启用,是 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick -- 组合的简写设置字符集。
这让我相信这--lock-tables
是默认开启的。
我是否需要同时指定--skip-lock-tables
或--single-transaction
仅设置后者以确保在转储期间不会锁定表?
如果您使用该
--single-transaction
选项,它会关闭--lock-tables
。这就是文档说它们相互排斥时的含义。https://github.com/mysql/mysql-server/blob/8.0/client/mysqldump.cc#L1076