mysql物理备份工具Xtrabackup安装配置
mysql物理備份工具Xtrabackup安裝配置
1????Xtrabackup工具介紹
Xtrabackup是一個對InnoDB做物理數(shù)據(jù)備份的工具,支持在線熱備份(備份時不影響數(shù)據(jù)讀寫),是商業(yè)備份工具InnoDB Hotbackup的一個很好的替代品。
Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能備份InnoDB和XtraDB兩種數(shù)據(jù)表,而不能備份MyISAM數(shù)據(jù)表。
(2)innobackupex是用來備份非InnoDB表的,同時會調(diào)用xtrabackup命令來備份InnoDB表,還會和mysql server發(fā)送命令進行交會,如加讀鎖、獲取位點等。簡單來說,innobackupex在xtrabackup之上做了一層封裝。
一般情況下,我們是希望能備份MyISAM表的,雖然我們可能自己不用MyISAM表,但是mysql庫下的系統(tǒng)表示MyISAM的,因此備份基本都通過innobackupex命令進行;另外一個原因是我們可能需要保存位點信息。
2???XtraBackup備份原理
XtraBackup基于InnoDB的crash-recovery功能,它會復(fù)制InnoDB的data file,由于不鎖表,復(fù)制出來的數(shù)據(jù)是不一致的,在恢復(fù)的時候使用crash-recovery,使得數(shù)據(jù)恢復(fù)一致。
InnoDB維護了一個redo log,又稱為transaction log(事務(wù)日志),它包含了InnoDB數(shù)據(jù)的所有改動情況。當(dāng)InnoDB啟動的時候,它會先去檢查data file和transaction log,并且會做兩步操作:
XtraBackup在備份的時候,一頁一頁的復(fù)制InnoDB的數(shù)據(jù),而且不鎖定表,與此同時,XtraBackup還有另外一個線程監(jiān)視著transaction log,一旦log發(fā)生變化,就把變化過的log pages復(fù)制走。為什么要著急復(fù)制走呢?因為transaction log文件大小有限,寫滿之后,就會從頭再開始寫,所以新數(shù)據(jù)可能會覆蓋到舊的數(shù)據(jù)。
在prepare過程中,XtraBackup使用復(fù)制到的transaction log對備份出來的InnoDB data file進行crash recovery。
3??XtraBackup備份特點
(1)備份過程快速、可靠
(2)備份過程不會打斷正在執(zhí)行的事務(wù)
(3)能夠基于壓縮等功能節(jié)約磁盤空間和流量
(4)自動實現(xiàn)備份檢驗
(5)還原速度快
4? ?XtraBackup安裝
本來想用源碼安裝的,但總是不斷報錯,所以只好采用yum方法安裝了
打開官網(wǎng)yum源安裝方法說明
https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html
按照步驟安裝官網(wǎng)的yum源
# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# ls /etc/yum.repos.d/
CentOS-Base.repo?????? CentOS-fasttrack.repo? CentOS-Vault.repo? percona-release.repo
CentOS-Debuginfo.repo? CentOS-Media.repo????? epel.repo
安裝xtrabackup
# yum list|grep percona???? #測試是否安裝成功官網(wǎng)的yum源
# yum install percona-xtrabackup-24
# xtrabackup -version??? #查看版本信息
也可以選用其他版本用rpm包方式安裝
https://www.percona.com/downloads/XtraBackup/LATEST/binary/redhat/6/x86_64/
https://www.percona.com/downloads/XtraBackup/LATEST/
5??XtraBackup常用參數(shù)
--user=USER???????????????????? 指定備份用戶,不指定的話為當(dāng)前系統(tǒng)用戶
--password=PASSWD????????????? 指定備份用戶密碼
--port=PORT???????????????????? 指定數(shù)據(jù)庫端口
--defaults-group=GROUP-NAME???? 在多實例的時候使用
--host=HOST??????????????????? ?指定備份的主機,可以為遠程數(shù)據(jù)庫服務(wù)器
--apply-log ? ?應(yīng)用 BACKUP-DIR 中的 xtrabackup_logfile 事務(wù)日志文件。一般情況下,在備份完成后,數(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)。
--apply-log-only ? ?這個選項使在準備備份(prepare)時,只執(zhí)行重做(redo)階段,這對于增量備份非常重要。
--database????????????? ???????指定需要備份的數(shù)據(jù)庫,多個數(shù)據(jù)庫之間以空格分開
--defaults-file???????????????? 指定mysql的配置文件
--copy-back???????????????????? 將備份數(shù)據(jù)復(fù)制回原始位置
--incremental?????????????????? 增量備份,后面跟要增量備份的路徑
--incremental-basedir=DIRECTORY 增量備份時使用指向上一次的增量備份所在的目錄
--incremental-dir=DIRECTORY??? ?增量備份還原的時候用來合并增量備份到全量,用來指定全備路徑
--redo-only???????????????????? 對增量備份進行合并
--rsync????? 加快本地文件傳輸,適用于non-InnoDB數(shù)據(jù)庫引擎。不與--stream共用
--safe-slave-backup
--no-timestamp????????????????? 生成的備份文件不以時間戳為目錄.
6? ??XtraBackup備份數(shù)據(jù)
6.1???全量備份
查看備份之前都有哪些庫
mysql> show databases;
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| binlog???????????? |
| database1????????? |
| mysql????????????? |
| performance_schema |
| wangning?????????? |
| wordpress????????? |
+--------------------+
7 rows in set (0.16 sec)
全備份數(shù)據(jù)存放在/data/backup/full下面,innobackupex會自動創(chuàng)建一個文件夾+以當(dāng)前系統(tǒng)時間命名的文件夾
# innobackupex --defaults-file=/etc/my.cnf? --user=root --password=abc123 --socket=/tmp/mysql.sock /data/backup/full
# ls /data/backup/full/
2017-12-11_09-10-45
備份好的目錄里各文件說明,×××部分為備份之前建的庫
# ls /data/backup/full/2017-12-11_09-10-45/
backup-my.cnf? ibdata1???????????? wangning??????????????? xtrabackup_checkpoints
binlog???????? mysql?????????????? wordpress?????????????? xtrabackup_info
database1????? performance_schema? xtrabackup_binlog_info? xtrabackup_logfile
(1) backup-my.cnf —— 備份命令用到的配置選項信息;
(2) ibdata1 —— 備份的表空間文件;
(3) xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;
(4) xtrabackup_binlog_info —— mysql服務(wù)器當(dāng)前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置;
(5) xtrabackup_logfile —— 備份的重做日志文件。
(6) xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號)范圍信息;
# cat /data/backup/full/2017-12-11_09-10-45/xtrabackup_checkpoints
backup_type = full-backuped????? #可以看出是全備份
from_lsn = 0????????????????????? #記錄了LSN,日志偏移量
to_lsn = 8096126
last_lsn = 8096126
compact = 0
recover_binlog_info = 0
6.2???恢復(fù)全備數(shù)據(jù)
6.2.1??模擬數(shù)據(jù)庫數(shù)據(jù)損壞
關(guān)閉數(shù)據(jù)庫并移除數(shù)據(jù)文件
# service mysqld stop
# mv /application/mysql/data ?/opt/???
# mkdir /application/mysql/data??? #創(chuàng)建數(shù)據(jù)目錄
# chown -R mysql.mysql /application/mysql/data
6.2.2???準備完整的數(shù)據(jù)備份文件
一般情況下,這個/data/backup/full/2017-12-11_09-10-45備份不能用于恢復(fù),因為備份的數(shù)據(jù)中可能會包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù),此時數(shù)據(jù)文件處于不一致的狀態(tài)。因此,我們現(xiàn)在就是要通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。
# innobackupex --defaults-file=/etc/my.cnf? --user=root --password=abc123 --socket=/tmp/mysql.sock --apply-log /data/backup/full/2017-12-11_09-10-45/
6.2.3?開始恢復(fù)數(shù)據(jù)
# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc123 --socket=/tmp/mysql.sock ?--copy-back /data/backup/full/2017-12-11_09-10-45
171211 10:03:07 innobackupex: Starting the copy-back operation
?
IMPORTANT: Please check that the copy-back run completes successfully.
?????????? At the end of a successful copy-back run innobackupex
?????????? prints "completed OK!".
?
innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
Error: datadir must be specified.
當(dāng)執(zhí)行上述命令出現(xiàn)報錯時,是因為my.cnf文件里沒有指定datadir目錄
解決方法:
[mysqld]
datadir = /application/mysql/data
啟動mysql出現(xiàn)報錯
# service mysqld start??????????????????????????????????????????????????? Starting MySQL. ERROR! The server quit without updating PID file (/application/mysql/data/db01.pid).
將data目錄屬主改為mysql即可
# chown -R mysql.mysql /application/mysql/data/
此時mysql的數(shù)據(jù)已成功恢復(fù)了
6.3?增量備份
增量備份是在全量備份的基礎(chǔ)之上進行的
增量備份目錄1:/data/backup/increment1
增量備份目錄2:/data/backup/increment2
6.3.1? ??第一次增量備份和恢復(fù)
6.3.1.1? 第一次增量備份
先全備再增備,全備見6.1
# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc123 --socket=/tmp/mysql.sock? --incremental /data/backup/increment1 --incremental-basedir=/data/backup/full/2017-12-11_09-10-45
生成一個以系統(tǒng)時間命名的文件夾
# ls /data/backup/increment1/
2017-12-11_10-51-27
--incremental-basedir指的是完全備份所在的目錄,此命令執(zhí)行結(jié)束后,innobackupex命令會在/data/backup/increment1目錄中創(chuàng)建一個新的以時間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過增量備份之后再一次進行增量備份時,其--incremental-basedir應(yīng)該指向上一次的增量備份所在的目錄。需要注意的是,增量備份僅能應(yīng)用于InnoDB或XtraDB表,對于MyISAM表而言,執(zhí)行增量備份時其實進行的是完全備份。
6.3.1.2? 第一次增備恢復(fù)
準備完整的數(shù)據(jù)恢復(fù)文件
全備 --apply-log
# innobackupex --defaults-file=/etc/my.cnf? --user=root --password=abc123 --socket=/tmp/mysql.sock --apply-log? --redo-only /data/backup/full/2017-12-11_09-10-45/
增備1 --apply-log
# innobackupex --defaults-file=/etc/my.cnf? --user=root --password=abc123 --socket=/tmp/mysql.sock --apply-log? --redo-only /data/backup/full/2017-12-11_09-10-45/ --incremental-dir=/data/backup/increment1/2017-12-11_10-51-27
模擬數(shù)據(jù)庫損壞,詳見6.2.1
開始恢復(fù)數(shù)據(jù),詳見6.2.3
6.3.2??第二次增量備份和恢復(fù)
6.3.2.1? 第二次增量備份
第二次增量備份是在第一次增量備份的基礎(chǔ)上進行的
# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc123 --socket=/tmp/mysql.sock? --incremental /data/backup/increment2 --incremental-basedir=/data/backup/increment1/2017-12-11_10-51-27
生成一個以系統(tǒng)時間命名的文件夾
# ls /data/backup/increment2/
2017-12-11_10-58-55
6.3.2.2? 第二次增備恢復(fù)
準備完整的數(shù)據(jù)恢復(fù)文件
增備2 --apply-log
# innobackupex --defaults-file=/etc/my.cnf? --user=root --password=abc123 --socket=/tmp/mysql.sock --apply-log? --redo-only /data/backup/full/2017-12-11_09-10-45/ --incremental-dir=/data/backup/increment2/2017-12-11_10-58-55
模擬數(shù)據(jù)庫損壞,詳見6.2.1
開始恢復(fù)數(shù)據(jù),詳見6.2.3
6.4????三次以上增量備份
按照6.3.2.2以此類推即可
轉(zhuǎn)載于:https://blog.51cto.com/xiaocao13140/2121159
總結(jié)
以上是生活随笔為你收集整理的mysql物理备份工具Xtrabackup安装配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Week09_day05(Java AP
 - 下一篇: java推送企业微信消息