標籤:之間 arc com 相關 變化 nobackup 備份檔案 檢測 語句
簡介:
? XtraBackup包含兩個主要的工具即:xtrabackup和innobackupex
? xtrabackup:只能備份InnoDB和XtraDB兩種事務引擎的表,不支援備份非事務引擎的表。
? innobackupex:封裝了xtrabackup的perl指令碼,支援在全域讀鎖下的非事務表備份,支援無全域讀鎖下的事務表。
安裝:
? 推薦安裝percona公司的源然後yum安裝
yum -y install https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-4.noarch.rpmyum -y install percona-xtrabackup-24
innobackupex備份流程:
? 1.備份開始時先開啟一個後台檢測進程,即時監測redo的變化,一但發現redo中有新日誌寫入,立刻將日誌記入其的後台記錄檔(xtrabackup_log)中,
? 2.複製InnoDB表的資料檔案,系統資料表空間檔案ibdata1,完成後進入下一步,
? 3.執行全域讀鎖,鎖住所有的表(事務,非事務),拷貝非事務表的檔案(.frm .MYI .MYD),擷取binlog位置,解鎖全部表
? 4.停止xtrabackup_log,結束備份
| 階段 |
解釋 |
| 產生xtrabackup記錄檔 |
軟體本身開啟一個用來儲存redo的日誌 |
| 拷貝InnoDB相關檔案(.ibd表資料檔案,ibdata1復原空間) |
|
| FTWRL,全域讀鎖 |
非事務表不支援用事務保證一致性,需要讀鎖 |
| 拷貝innodb表結構檔案frm,非事務表的全部檔案 |
|
| 擷取binlog位置 |
以此位置作為備份的全域位置 |
| 釋放全域讀鎖 |
備份初步結束 |
| 停止xtrabackup的日誌工作。 |
備份結束 |
? 備份語句:
innobackupex --defaults-file=/etc/my.cnf --user=bak --password=bak123 --stream=xbstream .|gzip cat ->xtrabak.xb.gz
?
innobackupex恢複流程:
? 啟動XtraBackup軟體包內建的InnoDB執行個體,回放xtrabackup過程中收集的xtrabackup_log:
? 根據binlog,回放binlog中已經登記,但redo中未提交但已經prepare的事務。
? 根據binlog,復原binlog中未登記,但redo中已經prepare的事務
? 將應用好的檔案拷回要被恢複執行個體的資料目錄,賦予mysql使用者的許可權即可。
#解壓gunzip all.xb.gz -c|xbstream -x -C /data/full#應用xtrabackup_loginnobackupex --apply-log --use-memory=1G /data/full#拷回預備恢複的檔案,也可以用手工拷貝代替innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/full#將拷回的檔案所有權賦給mysql使用者chown -R mysql.mysql /data/mysql/3306#啟動資料庫mysqld --defaults-file=/etc/my.cnf
附:
1.使用xbstream而不是tar的原因:
? 傳統複製的情況下,從從庫備份,需要獲得從庫的複製資訊,可以使用--slave-info參數,這樣複製資訊會附加在備份檔案包中,但是用tar的時候總是會截斷一部分複製資訊的描述檔案。轉用xbstream流傳輸後沒有問題/另外,如果使用GTID,不考慮擷取binlog file和pos的話,tar或者xbstream都可以接受。
2.不推薦使用增備的原因:
? 1.增備恢複步驟繁瑣(需要在最後一個增備之前,只應用redo,最後一個才應用全部xtrabackup_log,拷回也麻煩)
? 2.與全備加binlogserver相比,不能恢複增備之間任意時間點的資料。
3.總的來看,XtraBackup仍是物理備份為主,輔以邏輯備份完成資料一致性的備份方式。
?
?
【MySQL】【備份】使用XtraBackup物理備份MySQL的流程