mysqldump命令之single-transaction

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

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

mysql

相關文章
相關標籤/搜索