前言:說到數據庫備份,咱們知道能夠用來對數據庫進行備份的工具備mysqldump、mydumer、mysqlpump等等,實際工做中,機器上的數據庫不大的話,都是用mysqldump工具來備份,這些備份工具各有優缺點,這裏不詳細介紹,今天分享另外一個數據庫備份工具,叫XtraBackup。
1、Xtrabackup介紹mysql
1.官網說明sql
由於當數據庫超過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完整備份和還原,後面還會繼續寫,若是那裏寫得很差,請多多指教,謝謝