mysqldump備份時加single-transaction會不會加鎖

psufnxk2000發表於2016-07-13
mysqldump --all-databases --master-data=2 --single-transaction --quick -R --events -uroot > /tmp/full.sql

通過根蹤可以看到:
8 Connect root@localhost on
8 Query /*!40100 SET @@SQL_MODE='' */
8 Query /*!40103 SET TIME_ZONE='+00:00' */
8 Query FLUSH /*!40101 LOCAL */ TABLES
8 Query FLUSH TABLES WITH READ LOCK
8 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
8 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
8 Query SHOW VARIABLES LIKE 'gtid\_mode'
8 Query SHOW MASTER STATUS
8 Query UNLOCK TABLES

從紅色部分可以看出,還是會加鎖的,在這個過程中,別的session同樣不能進行dml, 只是加鎖的時間很短。


使用single-transaction時要求:
1 只對支援事務的儲存引擎有效果
2 不能執行ddl操作,因為 ddl操作會改變字典表,而字典表多數是myisam的
3 事務隔離級別為 RR

mysqldump備份時,加和不加single-transaction的區別:
通過開啟general_log可以看到過程:
1 加single-transaction時,是通過START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */的方式來實現的。
  裡面同時有很多savepoint,
2 不加single-trsnsaction是通過在整個過程中鎖表實現資料一致性的。


 
左圖為加single-transaction,右圖未加:





轉載請註明源出處
QQ 273002188 歡迎一起學習
QQ 群 236941212
oracle,mysql,PG 相互交流



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-2121984/,如需轉載,請註明出處,否則將追究法律責任。

相關文章