我需要 --skip-lock-tables 和 --single-transaction 吗?

bil*_*oah 9 mysql innodb mysqldump

我正在使用 mysqldump 对完全由 InnoDB 表组成的架构执行定期备份。mysqldump 文档有这样的说法--single-transaction

--single-transaction 选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会导致隐式提交任何挂起的事务。

然而,这里(以及堆栈交换网络上的其他地方)大约有无数篇博客文章和答案推荐:

mysqldump --single-transaction --skip-lock-tables my_database > my_database.sql
Run Code Online (Sandbox Code Playgroud)

如果这两个选项是互斥的,我认为指定--single-transaction就足够了。然而,文档还说明了这一点--opt

该选项默认启用,是 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick -- 组合的简写设置字符集。

这让我相信--lock-tables默认情况下是打开的。

我是否需要指定--skip-lock-tables--single-transaction仅设置后者足以确保表在转储期间不被锁定?

Bil*_*win 11

如果您使用该--single-transaction选项,它将关闭--lock-tables。这就是文档说它们是相互排斥的意思。

https://github.com/mysql/mysql-server/blob/8.0/client/mysqldump.cc#L1076

  if (opt_single_transaction || opt_lock_all_tables) lock_tables = false;
Run Code Online (Sandbox Code Playgroud)

  • win的源代码。谢谢你! (2认同)