Mysql

我需要 –skip-lock-tables 和 –single-transaction 嗎?

  • September 28, 2021

我正在使用 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

 if (opt_single_transaction || opt_lock_all_tables) lock_tables = false;

引用自:https://dba.stackexchange.com/questions/300259