mysql資料庫實現備份的操作包括完整備份和增量備份等,本文我們主要介紹一下增量備份和完整備份的原理,接下來我們就一起來了解一下這部分內容。
完整備份的原理:
對於innodb,xtrabackup基於innodb的crash-recovery功能進行備份。
crash-recovery是這樣的:innodb維護了乙個redo log,又稱為 transaction log,也叫事務日誌,它包含了innodb資料的所有改動情況。innodb啟動的時候先去檢查datafile和transaction log,然後應用所有已提交的事務並回滾所有未提交的事務。
xtrabackup在備份的時候並不鎖定表,而是一頁一頁地複製innodb的資料,與此同時,xtrabackup還有另外乙個執行緒監視著transactions log,一旦log發生變化,就把變化過的log pages複製走(因為transactions log檔案大小有限,寫滿之後,就會從頭再開始寫,新資料可能會覆蓋到舊的資料,所以一旦變化就要立刻複製走)。在全部資料檔案複製完成之後,停止複製logfile。
xtrabackup採用了其內建的innodb庫以read-write模式開啟innodb的資料檔案,然後每次讀寫1mb(1mb/16kb=64page)的資料,一頁一頁地遍歷,同時用innodb的buf_page_is_corrupted()函式檢查此頁的資料是否正常,如果正常則進行複製,如不正常則重新讀取,最多重讀10次,如果還是失敗,則備份失敗退出。複製transactions log的原理也是一樣的,只不過每次讀寫512kb(512kb/16kb=32page)的資料。
由於xtrabackup其內建的innodb庫開啟檔案的時候是rw的,所以執行xtrabackup的使用者,必須對innodb的資料檔案具有讀寫許可權。
由於xtrabackup要從檔案系統中複製大量的資料,所以它盡可能地使用posix_fadvise(),來告訴os不要快取讀取到的資料(因為這些資料不會重用到了),從而提公升效能。如果要快取的話,大量的資料會對os的虛擬記憶體造成很大的壓力,其它程序如mysqld)很有可能會被swap出去,這樣就出問題了。同時,xtrabackup在讀取資料的時候還盡可能地預讀。
由於不鎖表,所以複製出來的資料是不一致的,資料的一致性是在恢復的時候使用crash-recovery進行實現的。
對於myisam,xtrabackup還是首先鎖定所有的表,然後複製所有檔案。
增量備份的原理:
在完整備份和增量備份檔案中都有乙個檔案xtrabackup_checkpoints會記錄備份完成時檢查點的lsn。在進行新的增量備份時,xtrabackup會比較表空間中每頁的lsn是否大於上次備份完成的lsn,如果是,則備份該頁,並記錄當前檢查點的lsn。
SqlServer 完整備份與還原
建立資料庫與建表等操作請參考這裡 sqlserver 建立資料庫 使用多個檔案組和物理磁碟 下圖是備份前的資料情況,其中customer表中一共四條記錄 下面開始執行完全備份,參考 sqlserver 備份資料庫 按時間命名備份檔案 備份之後可以看到備份目錄下已經生成的bak檔案 下面對custom...
mysql完整備份與恢復
1 備份單個資料庫 mysql資料庫自帶了乙個很好用的備份命令,就是mysqldump,他的基本使用如下 語法 mysqldump u 使用者名稱 p 資料庫名 備份的檔名 備份一 1 備份 mysqldump uroot p test opt test bak.sql 2 檢視備份資料的內容 eg...
完整備份 增量備份 差異備份
完整備份 增量備份 差異備份 完整備份 對資料檔案進行完整的備份 複製 乙份在本地或網路其他位置。比較消耗資源,但是可以保證資料完整性。a a 增量備份 在上一次完整備份 增量備份的基礎上只對每次發生變化 新增或修改 的資料檔案進行遞增備份。這種備份方式備份比較方便,可以減少資源消耗。但是有乙個問題...