Mysqldump用于備份,不得不提兩個關鍵的參數:
--single-transaction:在開始備份前,執行start transaction指令,以此來擷取一緻性備份,該參數僅對innodb存儲引擎有效。
--master-data=2:主要用于記錄一緻性備份的位點。
1.調用FTWRL(flush tables with read lock),全局禁止讀寫
2.開啟快照讀,擷取此時的快照(僅對innodb表起作用)
3.備份非innodb表資料(*.frm,*.myi,*.myd等)
4.非innodb表備份完畢後,釋放FTWRL鎖
5.逐一備份innodb表資料
6.備份完成。
而5.6的mysqldump利用儲存點機制,每備份完一個表就将一個表上的MDL鎖釋放,避免對一張表鎖更長的時間。這裡可以參考我之前的blog:FLUSH TABLE WITH READ LOCK
大家可能有一個疑問,為啥備份innodb表之前,就已經将鎖釋放掉了,這實際上是利用了innodb引擎的MVCC機制,開啟快照讀後,就能擷取那個時間的一緻的資料,無論需要備份多長時間,直到整個事務結束(commit)為止。
實體備份(Xtrabackup)
相對于邏輯備份利用查詢提取資料中的所有記錄,實體備份更直接,拷貝資料庫檔案和日志來完成備份,是以速度會更快。當然,無論是開源的Mydumper還是官方最新的備份工具(5.7.11的mysqlpump)都支援了多線程備份,是以速度差異可能會進一步縮小,至少從目前生産環境來看,實體備份使用還是比較多的。由于Xtrabackup支援備份innodb表,實際生産環境中我們使用的工具是innobackupex,它是對xtrabackup的一層封裝。innobackupex 腳本用來備份非 InnoDB 表,同時會調用 xtrabackup 指令來備份 InnoDB 表,innobackupex的基本流程如下:
1.開啟redo日志拷貝線程,從最新的檢查點開始順序拷貝redo日志;
2.開啟idb檔案拷貝線程,拷貝innodb表的資料
3.idb檔案拷貝結束,通知調用FTWRL(flash tables with read lock),擷取一緻性位點
4.備份非innodb表(系統表)和frm檔案
5.由于此時沒有新事務送出,等待redo日志拷貝完成
6.最新的redo日志拷貝完成後,相當于此時的innodb表和非innodb表資料都是最新的
7.擷取binlog位點,此時資料庫的狀态是一緻的。
8.釋放鎖,備份結束。
LOCK TABLES FOR BACKUP
作用:備份資料
1.禁止非innodb表更新
2.禁止所有表的ddl
優化點:
1.不會被大查詢堵塞(關閉表)
2.不會堵塞innodb表的讀取和更新,這點非常重要,對于業務表全部是innodb的情況,則備份過程中DML完全不受損
UNLOCK TABLES
LOCK BINLOG FOR BACKUP
作用:擷取一緻性位點。
1.禁止對位點更新的操作
1.允許DDl和更新,直到寫binlog為止。
UNLOCK BINLOG
#####
對于INNODB,xtrabackup基于innodb的crash-recovery功能進行備份。
innodb維護了一個redo log(事務日志),包含了INNODB資料所有改動情況,INNODB啟動時,先去檢查datafile 和transaction log然後應用所有已送出的事務前滾
,未送出進行復原。在備份過程中是不鎖表,1頁頁複制資料。同時,XTRABACKUP還有另外一個線程監視着REDOLOG,一個監控線程會監視transaction log一旦變化,就會被複制走。 .xtrabackup工具備份到最後執行flash tables with read lock ,對資料庫進行鎖表以便進行一緻性備份 保證資料的一緻性。在全部資料檔案完成之後,停止複制logfie
xtrabackup 采用内置的INNODB庫以READ WRITE模式打開INNODB的資料檔案。然後每次RW是1MB的資料,一頁一頁的檢視,同時用INNODB的BUF_PAGE_IS_CORRUPTED()函數檢查此頁資料是否正常。如果正常,複制,不正常推出,最多讀取10次,複制REDOLOG的原理也是一樣的,隻是每次讀史512KB
xtrabackup工具備份到最後執行flash tables with read lock ,對資料庫進行鎖表以便進行一緻性備份
增量備份原理:在完整備份和增量備份檔案中都有一個檔案,xtrabackup_checkpoints會記錄備份完成時檢查點LSN ,在進行新的增量備份時,XTRABACKUP會比較表空間中每頁的LSN是否大于上次備份完成的LSN号,如果是備份,則備份,并記錄目前的LSN号
<a href="http://s3.51cto.com/wyfs02/M00/8A/55/wKioL1gt0Gegp1UAAAB2dYMbbjg068.png" target="_blank"></a>
本文轉自 DBAspace 51CTO部落格,原文連結:http://blog.51cto.com/dbaspace/1874088