MySQL數據庫之xtrabackup物理備份(一)


前言:說到數據庫備份,我們知道可以用來對數據庫進行備份的工具有mysqldump、mydumer、mysqlpump等等,實際工作中,機器上的數據庫不大的話,都是用mysqldump工具來備份,這些備份工具各有優缺點,這里不詳細介紹,今天分享另一個數據庫備份工具,叫XtraBackup。

一、Xtrabackup介紹

1.官網說明

Percona XtraBackup可以在不阻止用戶查詢的情況下實現MySQL備份,因此非常適合擁有大數據集和無法承受長時間停機的關鍵任務應用程序的公司。作為開源解決方案免費提供,Percona XtraBackup降低了備份成本,同時為MySQL備份提供了獨特的功能。
 
2.Xtrabackup優點
快速可靠地完成備份
備份期間不間斷的事務處理
節省磁盤空間和網絡帶寬
自動備份驗證
更快的恢復時間可延長正常運行時間
支持InnoDB,XtraDB和HailDB 存儲引擎的完全非阻塞備份
 
3.Xtrabackup備份的過程

 
(1)備份開始時會開啟一個后台檢測進程,實時檢測mysql redo(已提交的事務)的變化,一旦發現redo中有新日志寫入,立刻將日志記入后台日志文件xtrabackup_log中,
(2)復制InnoDB的數據文件和系統表空間文件ibdata1,
(3)待復制結束后,執行flush tables with read lock操作,復制.frm、.MYI、.MY等文件
(4)執行flush tables with read lock的目的是為了防止數據表發生DML操作,並且在這一時刻獲得binlog的位置,
(5)最后會發出unlock tables,把表設置為可讀寫狀態,
(6)最終停止xtrabackup_log。

4.為什么要用XtraBackup

因為當數據庫超過100G的話,用mysqldump就沒有XtraBackup有優勢,工作中mysqldump備份大的數據還會出現卡住,斷開的可能性,XtraBackup支持完整備份,增量備份,完整恢復,增量恢復,對於innodb引擎備份時不鎖表進行熱備份。

二、XtraBackup安裝

1.xtrabackup官網有很多個版本,有1.6、2.0-2.4和8.0,每個版本都有不同,根據自己需要下載安裝,如:
xtrabackup1.6版本支持MySQL 5.0、5.1和5.5。
xtrabackup2.2和2.3版本支持備份MySQL 5.1 、5.5和5.6。
xtrabackup2.4版本支持MySQL 5.1、5.5、5.6和5.7。
xtrabackup8.0版本只支持MySQL8.0,不支持8.0之前的。
本文章使用xtrabackup2.3。


2.下載安裝

官網有源碼包下載,二進制包、還有存儲庫,官網推薦存儲庫下載,我這里環境用Centos7,所以用yum安裝,這里選擇安裝yum install -y percona-xtrabackup.x86_64

 1 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
 2 yum list | grep percona
 3 percona-xtrabackup.x86_64                 2.3.10-1.el7                 percona-release-x86_64
 4 percona-xtrabackup-22.x86_64              2.2.13-1.el7                 percona-release-x86_64
 5 percona-xtrabackup-22-debuginfo.x86_64    2.2.13-1.el7                 percona-release-x86_64
 6 percona-xtrabackup-24.x86_64              2.4.18-1.el7                 percona-release-x86_64
 7 percona-xtrabackup-24-debuginfo.x86_64    2.4.18-1.el7                 percona-release-x86_64
 8 percona-xtrabackup-80.x86_64              8.0.9-1.el7                  percona-release-x86_64
 9 percona-xtrabackup-80-debuginfo.x86_64    8.0.9-1.el7                  percona-release-x86_64
10 percona-xtrabackup-debuginfo.x86_64       2.3.10-1.el7                 percona-release-x86_64
11 percona-xtrabackup-test.x86_64            2.3.10-1.el7                 percona-release-x86_64
12 percona-xtrabackup-test-22.x86_64         2.2.13-1.el7                 percona-release-x86_64
13 percona-xtrabackup-test-24.x86_64         2.4.18-1.el7                 percona-release-x86_64
14 percona-xtrabackup-test-80.x86_64         8.0.9-1.el7                  percona-release-x86_64

安裝之后,可以檢查xtrabackup版本,我本地的數據庫版本是5.6

1 xtrabackup --version
2 xtrabackup version 2.3.6 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

3.工具介紹

Xtrabackup安裝完成后有4個可執行文件,其中2個比較重要的備份工具是innobackupex、xtrabackup

innobackupex
innobackupex是一個封裝xtrabackup的Perl腳本。。
xtrabackup
編譯后的C二進制文件,提供了使用MyISAM,InnoDB和XtraDB表備份整個MySQL數據庫實例的功能。
xbcrypt加密
用於加密和解密備份文件的實用程序。
xbstream
允許以流的形式從xbstream格式提取文件,類似tar。
xbcloud
用於從雲中下載xbstream歸檔的全部或部分或將其上傳到雲。

官網說明:innobackupex仍然像2.2版本一樣支持所有功能和語法,但是現在已棄用,並且將在下一個主要版本中刪除,Percona XtraBackup 2.3版本的推薦方式采取的備份是使用xtrabackup腳本,這篇文章介紹innobackupex腳本,差別不大。

4.innobackupex命令參數

--user=             #指定數據庫備份用戶

--password=          #指定數據庫備份用戶密碼

--port=             #指定數據庫端口

--host=             #指定備份主機

--socket=            #指定socket文件路徑

--databases=         #備份指定數據庫,多個空格隔開,如--databases="dbname1 dbname2",不加備份所有庫

--defaults-file=         #指定my.cnf配置文件

--apply-log             #日志回滾

--incremental=            #增量備份,后跟增量備份路徑

--incremental-basedir=    #增量備份,指上次增量備份路徑

--redo-only             #合並全備和增量備份數據文件

--copy-back             #將備份數據復制到數據庫,數據庫目錄要為空

--no-timestamp            #生成備份文件不以時間戳為目錄名

--stream=               #指定流的格式做備份,--stream=tar,將備份文件歸檔,--stream=xbstream

--remote-host=user@ip DST_DIR #備份到遠程主機
                      
--use-memory=          #該參數在prepare的時候使用,控制prepare時innodb實例使用的內存量
             
--parallel            #用於復制數據文件的線程數。配合-stream=xbstream
                      
--compress            #壓縮功能,配合-stream=xbstream
 
--compress-threads=4    #用於並行數據壓縮的線程數。此選項的默認值為1。配合-stream=xbstream
                      
--throttle=          #限制innobackupex讀寫InnoDB數據的速率

 

三、用innobackupex進行完整備份
1.執行完整備份命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password="123456" --socket=/tmp/mysql.sock --no-timestamp /data/backup/$(date +%F)/full
最后輸出下面信息表示成功備份
xtrabackup: Transaction log of lsn (42677124128) to (42677124128) was copied.
200127 13:21:18 completed OK!

在/data/backup目錄下面生成一個當前日期命名的目錄,時間目錄下面的full目錄里面存放着備份出來的文件

1 [root@devops 13:17:24/data/backup/]# ll 
2 total 2535576
3 drwx------ 3 root root       4096 Jan 27 13:17 2020-01-27

介紹一下目錄的文件信息

 1 [root@devops 13:21:18/data/backup/]# ll 2020-01-27/full/
 2 total 141364
 3 -rw-r----- 1 root root       388 Jan 27 13:21 backup-my.cnf   #備份命令用到的配置信息
 4 -rw-r----- 1 root root 144703488 Jan 27 13:17 ibdata1      #備份的表空間的文件 
 5 drwx------ 2 root root      4096 Jan 27 13:21 mysql            #備份出來的mysql、performance_schema、test數據庫
 6 drwx------ 2 root root      4096 Jan 27 13:21 performance_schema
 7 drwx------ 2 root root      4096 Jan 27 13:21 test
 8 -rw-r----- 1 root root        21 Jan 27 13:21 xtrabackup_binlog_info      #binlog日志信息
 9 -rw-r----- 1 root root       121 Jan 27 13:21 xtrabackup_checkpoints      #這個比較重要,里面存放着lsn(日志序列號)
10 -rw-r----- 1 root root       602 Jan 27 13:21 xtrabackup_info             #存放一些工具版本、數據庫版本、執行開始結束時間等信息
11 -rw-r----- 1 root root      2560 Jan 27 13:21 xtrabackup_logfile          #重做日志文件

2.模擬刪除整個數據目錄

cd /data/ && rm -rf mysqldata

3.kill掉mysql進程

pgrep mysql | xargs kill

4.准備

准備(prepare)一個完全備份
一般情況下,在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。“准備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。
innobackupex命令的-apply-log選項可用於實現上述功能
不建議在准備時中斷xtrabackup過程,因為這可能會導致數據文件損壞並且備份將變得不可用。如果准備過程中斷,則不能保證備份的有效性。

innobackupex --apply /data/backup/2020-01-27/full/

  最后輸出:200127 13:44:47 completed OK!

5.查看xtrabackup_checkpoints文件    

查看合並后的 checkpoints 其中的類型變為 full-prepared 即為可恢復。

backup_type = full-prepared

6.執行恢復之前要在my.cnf指定數據目錄

恢復備份之前,datadir必須為空。要注意在執行還原之前需要關閉MySQL服務器。不能還原到正在運行的mysqld實例的數據目錄(導入部分備份時除外)

1 cat /usr/local/mysql/my.cnf  | grep datadir
2 datadir         = /data/mysqldata

7.執行恢復命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /data/backup/2020-01-27/full
200127 13:56:37 completed OK!      

如果恢復最后輸出OK就沒問題

8.修改權限

由於將保留文件的屬性,因此在大多數情況下,mysql在啟動數據庫服務器之前,需要將文件的所有權更改為mysql

chown -R mysql.mysql /data/mysqldata

9.啟動

service mysqld start

10.檢查數據


總結:這篇文章介紹xtrabackup完整備份和還原,后面還會繼續寫,如果那里寫得不好,請多多指教,謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM