多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > MySQL-物理備份-Percona XtraBackup 備份原理

MySQL-物理備份-Percona XtraBackup 備份原理

來源:程序員人生   發布時間:2016-07-06 08:50:01 閱讀次數:4086次

Percona XtraBackup(簡稱PXB)是 Percona 公司開發的1個用于 MySQL 數據庫物理熱備的備份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部開源,真可謂是業界良知。

工具集
軟件包安裝完后1共有4個可履行文件,以下:
usr ├── bin │ ├── innobackupex │ ├── xbcrypt │ ├── xbstream │ └── xtrabackup

其中最主要的是 innobackupex 和 xtrabackup,前者是1個 perl 腳本,后者是 C/C++ 編譯的2進制。

xtrabackup 是用來備份 InnoDB 表的,不能備份非 InnoDB 表,和 mysqld server 沒有交互;innobackupex 腳本用來備份非 InnoDB 表,同時會調用 xtrabackup 命令來備份 InnoDB 表,還會和 mysqld server 發送命令進行交互,如加讀鎖(FTWRL)、獲得位點(SHOW SLAVE STATUS)等。簡單來講,innobackupex 在 xtrabackup 之上做了1層封裝。

1般情況下,我們是希望能備份 MyISAM 表的,雖然我們可能自己不用 MyISAM 表,但是 mysql 庫下的系統表是 MyISAM 的,因此備份基本都通過 innobackupex 命令進行;另外1個緣由是我們可能需要保存位點信息。

另外2個工具相對小眾些,xbcrypt 是加解密用的;xbstream 類似于tar,是 Percona 自己實現的1種支持并發寫的流文件格式。兩都在備份和解壓時都會用到(如果備份用了加密和并發)。

本文的介紹的主角是 innobackupex 和 xtrabackup。


通訊方式

2個工具之間的交互和調和是通過控制文件的創建和刪除來實現的,主要文件有:

  • xtrabackup_suspended_1
  • xtrabackup_suspended_2
  • xtrabackup_log_copied

舉個栗子,我們來看備份時 xtrabackup_suspended_2 是怎樣來調和2個工具進程的

  1. innobackupex 在啟動 xtrabackup 進程后,會1直等 xtrabackup 備份完 InnoDB 文件,方式就是等待 xtrabackup_suspended_2 這個文件被創建出來;
  2. xtrabackup 在備完 InnoDB 數據后,就在指定目錄下創建出這個文件,然后等這個文件被 innobackupex 刪除;
  3. innobackupex 檢測到文件 xtrabackup_suspended_2 被創建出來后,就繼續往下走;
  4. innobackupex 在備份完非 InnoDB 表后,刪除 xtrabackup_suspended_2 這個文件,這樣就通知 xtrabackup可以繼續了,然后等 xtrabackup_log_copied 被創建;
  5. xtrabackup 檢測到 xtrabackup_suspended_2 文件刪除后,就能夠繼續往下了。

是否是感覺有點不可思議,通過文件是不是存在來控制進程,這類方式非常的不靠譜,由于非常容易被外部干擾,比如文件被他人誤刪掉,或2個正在跑的備份控制文件誤放在同1個目錄下,就等著備份亂掉吧,但是 Percona 就是這么干的。

之所以這么弄,估計主要是由于 perl 和 C 2進制2個進程,沒有既好用又方便的通訊方式,弄個協議啥的太麻煩了。但是官方也覺得這類方式不靠譜,11年就弄了個 blueprint 要用C重寫 innobackupex,終究在2.3 版本實現了,innobackupex 功能全部集成到 xtrabackup 里面,只有1個 binary,另外為了使用上的兼容斟酌,innobackupex作為 xtrabackup 的1個軟鏈。對2次開發來講,2.3 擺脫了之前2個進程協作的負擔,架構上明顯要好過之前版本。斟酌到 perl + C 這類架構的長時間存在,大多數讀者朋友也基本用的2.3之前版本,本文的介紹也是基于老的架構(2.2版本),但是原理和2.3是1樣的,只是實現上的差別。


備份進程

全部備份進程以下圖:

PXB備份過程
  1. innobackupex 在啟動后,會先 fork 1個進程,啟動 xtrabackup進程,然后就等待 xtrabackup 備份完 ibd 數據文件;
  2. xtrabackup 在備份 InnoDB 相干數據時,是有2種線程的,1種是 redo 拷貝線程,負責拷貝 redo 文件,1種是 ibd 拷貝線程,負責拷貝 ibd 文件;redo 拷貝線程只有1個,在 ibd 拷貝線程之前啟動,在 ibd 線程結束后結束。xtrabackup 進程開始履行后,先啟動 redo 拷貝線程,從最新的 checkpoint 點開始順序拷貝 redo 日志;然后再啟動 ibd 數據拷貝線程,在 xtrabackup 拷貝 ibd 進程中,innobackupex 進程1直處于等待狀態(等待文件被創建)。
  3. xtrabackup 拷貝完成idb后,通知 innobackupex(通過創建文件),同時自己進入等待(redo 線程依然繼續拷貝);
  4. innobackupex 收到 xtrabackup 通知后,履行FLUSH TABLES WITH READ LOCK (FTWRL),獲得1致性位點,然后開始備份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)??截惙?InnoDB 文件進程中,由于數據庫處于全局只讀狀態,如果在業務的主庫備份的話,要特別謹慎,非 InnoDB 表(主要是MyISAM)比較多的話整庫只讀時間就會比較長,這個影響1定要評估到。
  5. 當 innobackupex 拷貝完所有非 InnoDB 表文件后,通知 xtrabackup(通過刪文件) ,同時自己進入等待(等待另外一個文件被創建);
  6. xtrabackup 收到 innobackupex 備份完非 InnoDB 通知后,就停止 redo 拷貝線程,然后通知 innobackupexredo log 拷貝完成(通過創建文件);
  7. innobackupex 收到 redo 備份完成通知后,就開始解鎖,履行 UNLOCK TABLES;
  8. 最后 innobackupex 和 xtrabackup 進程各自完成掃尾工作,如資源的釋放、寫備份元數據信息等,innobackupex 等待 xtrabackup 子進程結束后退出。

在上面描寫的文件拷貝,都是備份進程直接通過操作系統讀取數據文件的,只在履行 SQL 命令時和數據庫有交互,基本不影響數據庫的運行,在備份非 InnoDB 時會有1段時間只讀(如果沒有MyISAM表的話,只讀時間在幾秒左右),在備份 InnoDB 數據文件時,對數據庫完全沒有影響,是真實的熱備。

InnoDB 和非 InnoDB 文件的備份都是通過拷貝文件來做的,但是實現的方式不同,前者是以page為粒度做的(xtrabackup),后者是 cp 或 tar 命令(innobackupex),xtrabackup 在讀取每一個page時會校驗 checksum 值,保證數據塊是1致的,而 innobackupex 在 cp MyISAM 文件時已做了flush(FTWRL),磁盤上的文件也是完全的,所以終究備份集里的數據文件都是寫入完全的。


增量備份

PXB 是支持增量備份的,但是只能對 InnoDB 做增量,InnoDB 每一個 page 有個 LSN 號,LSN 是全局遞增的,page 被更改時會記錄當前的 LSN 號,page中的 LSN 越大,說明當前page越新(最近被更新)。每次備份會記錄當前備份到的LSN(xtrabackup_checkpoints 文件中),增量備份就是只拷貝LSN大于上次備份的page,比上次備份小的跳過,每一個 ibd 文件終究備份出來的是增量 delta 文件。

MyISAM 是沒有增量的機制的,每次增量備份都是全部拷貝的。

增量備份進程和全量備份1樣,只是在 ibd 文件拷貝上有不同。


恢復進程

如果看恢復備份集的日志,會發現和 mysqld 啟動時非常相似,其實備份集的恢復就是類似 mysqld crash后,做1次 crash recover。

恢復的目的是把備份集中的數據恢復到1個1致性位點,所謂1致就是指原數據庫某1時間點各引擎數據的狀態,比如 MyISAM 中的數據對應的是 15:00 時間點的,InnoDB 中的數據對應的是 15:20 的,這類狀態的數據就是不1致的。PXB 備份集對應的1致點,就是備份時FTWRL的時間點,恢復出來的數據,就對應原數據庫FTWRL時的狀態。

由于備份時 FTWRL 后,數據庫是處于只讀的,非 InnoDB 數據是在持有全局讀鎖情況下拷貝的,所以非 InnoDB 數據本身就對應 FTWRL 時間點;InnoDB 的 ibd 文件拷貝是在 FTWRL 前做的,拷貝出來的不同 ibd 文件最后更新時間點是不1樣的,這類狀態的 ibd 文件是不能直接用的,但是 redo log 是從備份開始1直延續拷貝的,最后的 redo 日志點是在持有 FTWRL 后獲得的,所以終究通過 redo 利用后的 ibd 數據時間點也是和 FTWRL 1致的。

所以恢復進程只觸及 InnoDB 文件的恢復,非 InnoDB 數據是不動的。備份恢復完成后,就能夠把數據文件拷貝到對應的目錄,然后通過mysqld來啟動了。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲天堂久久新 | 国产亚洲综合一区二区在线 | 欧美一区综合 | 欧美成人精品不卡视频在线观看 | 综合亚洲欧美日韩一区二区 | 午夜写真福利视频在线观看 | 免费国产一区二区在免费观看 | 四虎永久免费网站入口2020 | 国产精品久久久久影视不卡 | 欧美日韩高清观看一区二区 | 久久久久久久亚洲精品 | jizz性欧美2| 亚洲资源在线播放 | 免费观看性行为的视频网站 | 高清国产精品久久久久 | 性做久久久久久蜜桃花 | 欧美e片成 人 在线播放乱妇 | 爱插网 | 国产三级自拍视频 | 久久欧美精品 | 亚洲天堂中文 | 国产91精品高清一区二区三区 | 国产精品视频一区二区三区w | 国产成人精品久久一区二区小说 | 亚洲精品国自产拍在线观看 | 性黑人 | 一区二区手机视频 | 国内精品一区二区三区 | asianjapanese日本护士 | 国产日韩在线观看视频 | 亚洲人成网站999久久久综合 | 狠狠躁天天躁夜夜躁夜天战 | 性欧美bbbbbb| 久久日韩| 2022国产福利在线观看 | 性生活一级毛片 | jizz国产精品 | 亚洲黄视频在线观看 | 最新欧美精品一区二区三区不卡 | 中文字幕亚洲第一 | 亚洲欧美在线视频观看 |