詳解如何利用Xtrabackup進(jìn)行mysql增量備份
利用Xtrabackup進(jìn)行mysql增量備份
現(xiàn)在xtrabackup版本升級到了8.0,但是只對mysql8.0才有支持, 我們這還是使用2.4, 但是2.4相比之前的2.1有了比較大的變化:innobackupex 功能全部集成到 xtrabackup 里面,只有一個 binary,另外為了使用上的兼容考慮,innobackupex 作為 xtrabackup 的一個軟鏈,即 xtrabackup 現(xiàn)在支持非Innodb表備份,并且 Innobackupex 在下一版本中移除(8.0已經(jīng)移除了),建議通過xtrabackup替換innobackupex。還有其他的一些新特性,更多的說明可以看xtrabackup新版詳細(xì)說明。
下載地址: https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
文檔地址: https://docs.percona.com/percona-xtrabackup/2.4/index.html
安裝
如果安裝需要依賴就把依賴安裝一下
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo apt-get update sudo apt-get install percona-xtrabackup-24
設(shè)置數(shù)據(jù)庫用于備份賬戶
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456'; mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
全量備份
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/mysql # 會看到輸出 200603 09:55:37 Executing UNLOCK TABLES 200603 09:55:37 All tables unlocked 200603 09:55:37 [00] Copying ib_buffer_pool to /data/backups/mysql/ib_buffer_pool 200603 09:55:37 [00] ...done 200603 09:55:37 Backup created in directory '/data/backups/mysql/' 200603 09:55:37 [00] Writing /data/backups/mysql/backup-my.cnf 200603 09:55:37 [00] ...done 200603 09:55:37 [00] Writing /data/backups/mysql/xtrabackup_info 200603 09:55:37 [00] ...done xtrabackup: Transaction log of lsn (837940114) to (837940123) was copied. 200603 09:55:37 completed OK!
- 準(zhǔn)備備份
xtrabackup --prepare --target-dir=/data/backups/mysql
- 復(fù)制備份
我這里為了演示全量備份就直接將我博客 mysql 存儲的數(shù)據(jù)目錄給移動一下
mv /var/lib/mysql /var/lib/mysql_bak mkdir /var/lib/mysql xtrabackup --copy-back --target-dir=/data/backups/mysql # 這樣會保留原始備份 他會將當(dāng)時讀到my.cnf的datadir設(shè)置為恢復(fù)路徑 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./performance_schema/mutex_instances.frm to /var/lib/mysql/performance_schema/mutex_instances.frm 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./performance_schema/events_transactions_history_long.frm to /var/lib/mysql/performance_schema/events_transactions_history_long.frm 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info 200603 10:47:42 [01] ...done 200603 10:47:42 [01] Copying ./ibtmp1 to /var/lib/mysql/ibtmp1 200603 10:47:42 [01] ...done 200603 10:47:42 completed OK!
- 備份成功 重新啟動 博客還能正常訪問 哈哈哈哈
# 將恢復(fù)目錄的屬主更改一下 chown -R mysql:mysql mysql /etc/init.d/mysql start
如果恢復(fù)玩不想要備份數(shù)據(jù)可以使用 xtrabackup --move-back 命令
增量備份
增量是基于已有數(shù)據(jù)進(jìn)行備份的,也就行需要先創(chuàng)建一次全量備份,然后記錄當(dāng)時的記錄點
- 創(chuàng)建備份
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/base # 基于全量備份進(jìn)行增量 xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
- 查看備份類型 確認(rèn)是增量備份了
root@longing:/data/backups/inc1# cat xtrabackup_checkpoints backup_type = incremental from_lsn = 837943393 to_lsn = 837943393 last_lsn = 837943402 compact = 0 recover_binlog_info = 0 flushed_lsn = 837943402
from_lsn 是備份的起始 LSN,對于增量備份,它必須to_lsn與先前 base 備份的相同。
在這種情況下,您可以看到to_lsn (最后一個檢查點LSN)和last_lsn(最后一個復(fù)制的LSN)之間存在差異,這意味著在備份過程中服務(wù)器上有一些流量。
- 我們可以測試一下 對第一個增加繼續(xù)創(chuàng)建增量 創(chuàng)建增量之前先創(chuàng)建幾條數(shù)據(jù)
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
- 準(zhǔn)備恢復(fù)
已經(jīng)有3個備份了,我們要先對基礎(chǔ)數(shù)據(jù)進(jìn)行準(zhǔn)備,然后對兩個增量進(jìn)行準(zhǔn)備
xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1 xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2
xtrabackup --apply-log-only 合并除最后一個以外的所有增量時應(yīng)使用, 一旦準(zhǔn)備好,增量備份就與完整備份相同,可以用相同的方式還原它們。
- 恢復(fù)
xtrabackup --copy-back --target-dir=/data/backups/base
中間插入的數(shù)據(jù)就能看見了,真棒!
提問總結(jié)
- 增量備份步驟
- 創(chuàng)建基礎(chǔ)備份
- 一定條件進(jìn)行增量備份創(chuàng)建
- 對所有備份進(jìn)行準(zhǔn)備 所有增量基于基礎(chǔ)備份 相當(dāng)于合并操作
- 最后和全量備份一樣 直接恢復(fù)即可
原理
在InnoDB內(nèi)部會維護(hù)一個redo日志文件,我們也可以叫做事務(wù)日志文件.事務(wù)日志會存儲每一個InnoDB表數(shù)據(jù)的記錄修改。當(dāng)InnoDB啟動時,InnoDB會檢查數(shù)據(jù)文件和事務(wù)日志,并執(zhí)行兩個步驟:它應(yīng)用(前滾)已經(jīng)提交的 事務(wù)日志到數(shù)據(jù)文件,并將修改過但沒有提交的數(shù)據(jù)進(jìn)行回滾操作。
Xtrabackup 在啟動時會記住log sequence number(LSN), 并且復(fù)制所有的數(shù)據(jù)文件。復(fù)制過程需要一些時間,所以這期間如果數(shù)據(jù)文件有改動,那么將會使數(shù)據(jù)庫處于一個不同的時間點。這時,xtrabackup 會運行一個后臺進(jìn)程,用于監(jiān)視事務(wù)日志,并從事務(wù)日志復(fù)制最新的修改。Xtrabackup 必須持續(xù)的做這個操作,是因為事務(wù)日志是會輪轉(zhuǎn)重復(fù)的寫入,并且事務(wù)日志可以被重用。所以 xtrabackup 自啟動開始,就不停的將事務(wù)日志中每個數(shù)據(jù)文件的修改都記錄下來。上面就是 xtrabackup 的備份過程。
為什么最后一次增量備份不用 "--apply-log-only"
最后一次"準(zhǔn)備"操作可以不用跳過回滾操作,這樣用來恢復(fù)的數(shù)據(jù)文件本地就處理好了,當(dāng)服務(wù)啟動后就不會再進(jìn)入到回滾階段,如果最后一次使用了這個參數(shù),服務(wù)器啟動后將進(jìn)入回滾階段。所以這個--apply-log-only 只是用來合并增量用的避免下一個增量不可用。 可以參見 參見 man xtrabackup
為什么備份完后要準(zhǔn)備備份 "prepare"
一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因為備份的數(shù)據(jù)中可能會包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時數(shù)據(jù)文件仍處理不一致狀態(tài)。他作用是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件使數(shù)據(jù)文件處于一致性狀態(tài)。
為什么選擇這個做備份?
mysqldump備份缺點
效率較低,備份和還原速度慢,份過程中,數(shù)據(jù)插入和更新操作會被掛起
MySQL備份工具
跨平臺性差,備份時間長,冗余備份,浪費存儲空間
XtraBackup
備份過程中不鎖庫表,適合生產(chǎn)環(huán)境,由專業(yè)組織Percona提供( 改進(jìn)MySQL分支 )
XtraBackup能對表 庫進(jìn)行備份嗎?
當(dāng)然了,只不過博主太懶了,寫起來太麻煩了,不過原理都是差不多,操作也差不多,大家自己搞搞!
xtrabackup --user=bkpuser --password=123456 --backup --databases="u_test" --no-timestamp --target-dir=/data/backups/u xtrabackup --prepare --target-dir=/data/backups/u
還原
- 先
prepare,利用--apply-log的作用是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件使數(shù)據(jù)文件處于一致性狀態(tài) copy,因為是部分備份,不能直接用--copy-back,只能手動來復(fù)制需要的庫,也要復(fù)制ibdata(數(shù)據(jù)字典)cp /data/backups/u/ibdata1 /var/lib/mysql/cp -r u/u_test /var/lib/mysql/
以上就是詳解如何利用Xtrabackup進(jìn)行mysql增量備份的詳細(xì)內(nèi)容,更多關(guān)于mysql 增量備份 Xtrabackup的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
CentOS6.5下RPM方式安裝mysql5.6.33的詳細(xì)教程
本文給大家詳細(xì)介紹CentOS6.5下RPM方式安裝mysql5.6.33的教程,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友一起看看吧2016-10-10
MySQL 啟動失敗(code=exited, status=1/FAILURE)異常解決方案
在MySQL服務(wù)啟動時遇到啟動失敗問題,通過查看和分析錯誤日志文件,找到并解決了配置文件中的錯誤項,成功重啟了MySQL服務(wù).文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
Mysql數(shù)據(jù)庫之常用sql語句進(jìn)階與總結(jié)
這篇文章主要介紹了Mysql數(shù)據(jù)庫之常用sql語句,總結(jié)分析了MySQL數(shù)據(jù)庫常用的查詢、條件查詢、排序、連接查詢、子查詢等相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
MYSQL 5.6 從庫復(fù)制的部署和監(jiān)控的實現(xiàn)
這篇文章主要介紹了MYSQL 5.6 從庫復(fù)制的部署和監(jiān)控的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
解決Navicat for MySQL 連接 MySQL 報2005錯誤的問題
在本地MySQL的服務(wù)啟動后,由于Navicat的一些功能需要聯(lián)網(wǎng)才可以使用,今天重點給大家介紹Navicat for MySQL 連接 MySQL 報2005 -Unknown MySQL server host ‘localhost’(0)錯誤的情況與解決方法,感興趣的朋友一起看看吧2021-05-05

