mysqldump命令之single-transaction


=========================================================
在mysqldump中指定single-transaction時,會使用可重復讀(REPEATABLE READ)事務隔離級別來保證整個dump過程中數據一致性,該選項僅對InnoDB表有用,且不能與ALTER TABLE/CREATE TABLE/DROP TABLE/RENAME TABLE/TRUNCATE TABLE等DDL操作並行。

mysqldump的操作步驟如下: FLUSH TABLES; FLUSH TABLES WITH READ LOCK; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS; UNLOCK TABLES; SHOW TABLES LIKE 'xxx'
SET OPTION SQL_QUOTE_SHOW_CREATE=1 SHWO CREATE TABLE 'xxx' SHOW FIELDS FROM 'xxx' SHOW TABLE STATUS LIKE 'xxx'
SELECT /*!40001 SQL_NO_CACHE */ * FROM xxx QUIT

通過FLUSH TABLES WITH READ LOCK來鎖定所有表,然后開啟事務,由於外部事務不能對表數據進行修改,因此SHOW MASTER STATUS的數據不會發生變化,而由於事務隔離級別為REPEATABLE READ,因此在整個mysqldump過程中,獲取到的數據為開始事務時的數據,因此可以保證mysqldump出來的數據一致性,並可以結合SHOW MASTER STATUS出來的數據進行恢復。


=========================================================
在MySQL不同版本中,mysqldump --single-transaction與DDL操作發生並行時會出現問題:
http://www.cnblogs.com/TeyGao/p/7121232.html
https://www.cnblogs.com/TeyGao/p/7122924.html



=========================================================
如果從庫上開啟並行復制,在從庫執行mysqldump備份,執行"FLUSH TABLES WITH READ LOCK;"會與並行復制發生相互阻塞。
https://www.cnblogs.com/TeyGao/p/8654933.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM