mysql邏輯備份是熱備份嗎 mysql的備份原理

2021-10-18 12:07:07 字數 1382 閱讀 5571

1. 冷備份

原理: 關閉mysql伺服器,然後將data目錄下面的所有檔案進行拷貝儲存,需要恢復時,則將目錄拷貝到需要恢復的機器即可

2. 快照備份

原理: 將所有的資料庫檔案放在同一分割槽中,然後對該分割槽執行快照工作,對於linux而言,需要通過lvm(logical volumn manager)來實現。lvm使用寫時複製(copy-on-write)技術來建立快照,例如,對整個卷的某個瞬間的邏輯副本。

涉及到的檔案有邏輯副本檔案與日誌檔案。

僅支援innodb儲存引擎。lvm有乙個快照預留區域,如果原始卷資料有變化時,lvm保證在任何變更寫入之前,會複製受影響塊到快照預留區域。

image.png

日誌檔案記錄了lvm備份期間的操作,lvm備份的時候會加入flush table with read lock鎖,保證某個時間點上的資料的一致性。

3. 邏輯備份-mysqldump(熱備份)

原理: 一定要將事務表(innodb)和非事務表(比如myisam)區別對待,因為備份的流程與此息息相關。而且,到目前為止,我們也無法規避myisam表,即使我們的所有業務表都是innodb,因為mysql庫中系統表仍然採用的myisam表。備份的基本流程如下:

1.呼叫ftwrl(flush tables with read lock),全域性禁止讀寫(就是不commit)

2.開啟快照讀,獲取此時的快照(僅對innodb表起作用)

3.備份非innodb表資料(.frm,.myi,*.myd等)

4.非innodb表備份完畢後,釋放ftwrl鎖

5.逐一備份innodb表資料

6.備份完成。

4. xtrabackup

原理: 由於xtrabackup支援備份innodb表,實際生產環境中我們使用的工具是innobackupex,它是對xtrabackup的一層封裝。innobackupex 指令碼用來備份非 innodb 表,同時會呼叫 xtrabackup 命令來備份 innodb 表,innobackupex的基本流程如下:

1.開啟redo日誌拷貝的執行緒,從最新的檢查點開始順序拷貝redo日誌;

2.開啟innodb檔案拷貝的執行緒,拷貝innodb表的資料

3.innodb檔案拷貝結束,通知呼叫ftwrl,獲取一致性位點

4.備份非innodb表(系統表)和frm檔案

5.由於此時沒有新事務提交,等待redo日誌拷貝完成

6.最新的redo日誌拷貝完成後,相當於此時的innodb表和非innodb表資料都是最新的

7.獲取binlog位點,此時資料庫的狀態是一致的。

8.釋放鎖,備份結束。

image.png

歡迎關注,以後會不定時更新!

ps: 若你覺得可以、還行、過得去、甚至不太差的話,可以「關注」一下,就此謝過!

mysql 缺點熱備份 mysql 熱備份

xtrabackup mysql 的備份和恢復 1.準備 安裝依賴 yum install perl dbd mysql perl time hires libaio libaio devel y wget 2.安裝 tar zxf percona xtrabackup 2.2.3 4982 lin...

mysql 邏輯備份 mysql的邏輯備份和恢復

備份指定的資料庫或此資料庫中的某些表 mysqldump options db name tables backup.sql 備份指定的乙個或多個資料庫 mysqldump databases 資料庫1 資料庫2 資料庫3 backup.sql 備份所有的資料庫 mysqldump all data...

Mysql 邏輯備份

邏輯備份特點 在日常工作中,我們會使用 mysqldump 命令建立sql格式的轉儲檔案來備份資料庫。或者我們把資料匯出後做資料遷移,主從複製等操作。mysqldump是乙個邏輯備份工具,複製原始的資料庫物件定義和表資料產生一組可執行的sql語句。預設情況下,生成insert語句,也能生成其它分隔符...