xtabakcup
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括肇慶網(wǎng)站建設(shè)、肇慶網(wǎng)站制作、肇慶網(wǎng)頁(yè)制作以及肇慶網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,肇慶網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到肇慶省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
*****************************************************************
安裝
*****************************************************************
----1.編譯安裝percona-xtrabackup
yum -y install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr \
bison libtool zlib-devel libgcrypt-devel libcurl-devel crypt* libgcrypt* \
python-sphinx openssl imake libxml2-devel expat-devel ncurses5-devel ncurses-devle vim-common libgpg-error-devel libidn-devel
NOTE:2.2.16 需要python-sphinx openssl兩個(gè)依賴包.
---2.安裝相關(guān)插件
yum -y install perl-DBI
yum -y install perl-DBD-MySQL
yum -y install perl-Time-HiRes
yum -y install perl-IO-Socket-SSL
---3.編譯安裝組件
http://dist.schmorp.de/libev/
#tar xvzf libev-4.22.tar.gz
# ./configure
# make
# make install
#tar xvzf mysql-boost-5.7.15.tar.gz (編譯時(shí)候用)
--4.安裝xtrabackup
tar xvzf percona-xtrabackup-2.4.4.tar.gz
cd percona-xtrabackup-2.4.4.tar.gz
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=/home/mysql-5.7.15/boost
make
make install
---測(cè)試結(jié)果
# xtrabackup --version
xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
---4.備份預(yù)備工作
權(quán)限和連接
xtrabackup需要連接到數(shù)據(jù)庫(kù)和datadir操作權(quán)限。
xtrabackup或者innobackupex在使用過(guò)程中設(shè)計(jì)到2類用戶權(quán)限:
1.系統(tǒng)用戶,用來(lái)調(diào)用innobackupex或者xtrabackup
2.數(shù)據(jù)庫(kù)用戶,數(shù)據(jù)庫(kù)內(nèi)使用的用戶
需要的權(quán)限:連接到服務(wù)是為了執(zhí)行備份,需要在datadir上有read,write和execute權(quán)限。在數(shù)據(jù)庫(kù)中需要以下權(quán)限:
RELOAD和LOCK TABLES權(quán)限為了執(zhí)行FLUSH TABLES WITH READ LOCK 。
REPLICATION CLIENT為了獲取binary log 位置
CREATE TABLESPACE權(quán)限為了導(dǎo)入表,用戶表級(jí)別的恢復(fù)
SUPER權(quán)限在slave環(huán)境下備份用來(lái)啟動(dòng)和關(guān)閉slave線程
mysql>CREATEUSER'bkpuser'@'localhost' IDENTIFIED BY's3cret';
mysql>GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON*.*TO'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
---5.全備份和增量備份
全備份
$ innobackupex --user=DBUSER --password=DBUSERPASS /data/backups
從信息中會(huì)發(fā)現(xiàn)備份被創(chuàng)建在/data/backups/2016-10-25_00-00-09
內(nèi)部機(jī)制:在備份的時(shí)候innobackupex會(huì)調(diào)用xtrabackup來(lái)備份innodb表,并復(fù)制所有的表定義,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)。
增量備份
增量備份呢是為了減少空間使用和備份的時(shí)間。
增量備份的實(shí)現(xiàn),依賴于innodb頁(yè)上面的LSN(log sequence number),每次對(duì)數(shù)據(jù)庫(kù)的修改都會(huì)導(dǎo)致LSN自增。
增量備份會(huì)復(fù)制指定LSN之后的所有數(shù)據(jù)頁(yè)
$ innobackupex --user=DBUSER --password=DBUSERPASS -target-dir=/data/backups/1 --incremental-basedir=/data/backups/2016-10-25_00-00-09/
1目錄下回有增量備份新目錄
然后再創(chuàng)建一個(gè)增量備份
在增量備份1的基礎(chǔ)上再創(chuàng)建一個(gè)增量備份,記為增量備份2。
$ innobackupex --user=DBUSER --password=DBUSERPASS -target-dir=/data/backups/2 --incremental-basedir=/data/backups/1/2016-10-25_10-10-11/
增量備份替代方法
#可以使用指定—incremental-lsn來(lái)代替—incremental-basedir的方法創(chuàng)建增量備份。
#innobackupex --incremental /data/backups --incremental-lsn=1291135
#innobackupex --incremental /data/backups --incremental-lsn=1358967
---6.恢復(fù)數(shù)據(jù)
預(yù)備增量備份
1.需要先預(yù)備全備,但是只重做已提交事務(wù),不回滾未提交事務(wù),然后應(yīng)用到全備,也是只重做已提交事務(wù),不回滾未提交事務(wù)
2.回滾未提交事務(wù)
如果已經(jīng)回滾了未提交事務(wù),那么就無(wú)法再應(yīng)用增量備份
在全備上,使用—redo-only只做已提交事務(wù),不回滾未提交事務(wù)
innobackupex --apply-log --redo-only /data/backups/2016-10-25_00-00-09
應(yīng)用第一個(gè)增量備份
innobackupex --apply-log --redo-only /data/backups/2016-10-25_00-00-09 --incremental-dir=/data/backups/1/2016-10-25_10-10-11/
應(yīng)用第二個(gè)增量備份
innobackupex --apply-log /data/backups/2016-10-25_00-00-09 --incremental-dir=/data/backups/2/2016-10-25_16-30-32/
輸出結(jié)果,注意LSN的變化:
162026 22:08:43 InnoDB: Shutdown completed; log sequence number 1358967
161026 22:08:43 innobackupex: completed OK!
回滾未提交事務(wù)
當(dāng)應(yīng)用完所有增量備份的時(shí)候,就需要回滾所有為完成事務(wù)(如果最后一步加了 –redo-only就需要回滾未提交,不執(zhí)行的話在服務(wù)啟動(dòng)階段服務(wù)會(huì)處理未提交事務(wù))。
innobackupex --apply-log /data/backups/2016-10-25_00-00-09
還原操作
service mysqld stop
刪除數(shù)據(jù)庫(kù)數(shù)據(jù)目錄下的所有數(shù)據(jù)或者備份數(shù)據(jù)目錄下的所有數(shù)據(jù)
還原:
innobackupex --copy-back /data/backups/2016-10-25_00-00-09
改變數(shù)據(jù)庫(kù)目錄權(quán)限
chown -R mysql:mysql data/mysqldb
啟動(dòng)數(shù)據(jù)庫(kù)
service mysqld start
恢復(fù)順序:
# 全備應(yīng)用日志
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/
# 第一次的增量備份應(yīng)用日志,應(yīng)用完日志后,將合并到全備上,恢復(fù)使用全備恢復(fù)
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-45-06/
# 將第二次增量備份應(yīng)用日志并合并到全備上
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-46-33/
# 此時(shí)兩次增量備份其實(shí)都合并到全備上了,恢復(fù)是只需要使用全備進(jìn)行恢復(fù)就可以了
# 模擬數(shù)據(jù)故障[刪除數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄,執(zhí)行如下命令還原]
[root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-01-11_15-37-31/
# 恢復(fù)后的數(shù)據(jù)默認(rèn)權(quán)限是有問(wèn)題的,所以需要修改數(shù)據(jù)目錄權(quán)限,如下
[root@client103 ~]# chown -R mysql:mysql /var/lib/mysql/
# 此時(shí)數(shù)據(jù)恢復(fù)完成,重啟數(shù)據(jù)庫(kù)服務(wù),進(jìn)行測(cè)試就可以了。大家自行測(cè)試,有問(wèn)題留言反饋!