Mysqldump的備份流程

kakaxi9521發表於2022-01-27

可以透過開啟general log 來看mysqldump的整個備份過程。

set global general_log=ON;


備份指令碼:

mysqldump -uroot -p  -E -R --triggers --single-transaction --master-data=2 -A > test_all.sql

mysqldump的主要過程:

  1. 一開始執行 FLUSH TABLES 關閉例項中所有的表。  此過程可能會被已經存在的select 阻塞從而影響前臺業務。

  2. 執行語句 FLUSH TABLES WITH READ LOCK 獲取全域性表的讀鎖,保證表一致性。

  3. 設定會話級別事務的隔離級別為 REPEATABLE READ ,保證事務期間資料的一致性。

  4. 執行語句 START TRANSACTION /* !40100 WITH CONSISTENT SNAPSHOT */ 建立一個一致性事務快照。

  5. 檢視是否開啟 GTID。

  6. 獲取當前狀態下的binlog 檔案及position 資訊。 (在備份選項中執行了--master-data)。

  7. 執行 UNLOCK TABLES 釋放全域性讀鎖。

  8. 開始備份第一個資料庫資料,為事務建立一個檢查點,備份完一張表之後還原至檢查點接著備份下一張表,直至該資料庫所有的表備份完成,接著備份下一個資料庫資料,直至所有資料庫資料備份完成。

  9. 當備份完最後一個資料庫資料後釋放檢查點,退出並終止事務。


參考文件:

https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

https://dev.mysql.com/doc/refman/5.7/en/flush.html


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

相關文章