Mysql
我需要 –skip-lock-tables 和 –single-transaction 嗎?
我正在使用 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;