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

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

1、Xtrabackup介紹mysql

1.官網說明sql

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引擎備份時不鎖表進行熱備份。數據庫

2、XtraBackup安裝服務器

1.xtrabackup官網有不少個版本,有1.六、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.一、5.五、5.6和5.7。
xtrabackup8.0版本只支持MySQL8.0,不支持8.0以前的。
本文章使用xtrabackup2.3。網絡


2.下載安裝app

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

 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數據的速率

 

3、用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完整備份和還原,後面還會繼續寫,若是那裏寫得很差,請多多指教,謝謝

相關文章
相關標籤/搜索