您好,登錄后才能下訂單哦!
xtabakcup
*****************************************************************
安裝
*****************************************************************
----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兩個依賴包.
---2.安裝相關插件
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 (編譯時候用)
--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
---測試結果
# xtrabackup --version
xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
---4.備份預備工作
權限和連接
xtrabackup需要連接到數據庫和datadir操作權限。
xtrabackup或者innobackupex在使用過程中設計到2類用戶權限:
1.系統用戶,用來調用innobackupex或者xtrabackup
2.數據庫用戶,數據庫內使用的用戶
需要的權限:連接到服務是為了執行備份,需要在datadir上有read,write和execute權限。在數據庫中需要以下權限:
RELOAD和LOCK TABLES權限為了執行FLUSH TABLES WITH READ LOCK 。
REPLICATION CLIENT為了獲取binary log 位置
CREATE TABLESPACE權限為了導入表,用戶表級別的恢復
SUPER權限在slave環境下備份用來啟動和關閉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
從信息中會發現備份被創建在/data/backups/2016-10-25_00-00-09
內部機制:在備份的時候innobackupex會調用xtrabackup來備份innodb表,并復制所有的表定義,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)。
增量備份
增量備份呢是為了減少空間使用和備份的時間。
增量備份的實現,依賴于innodb頁上面的LSN(log sequence number),每次對數據庫的修改都會導致LSN自增。
增量備份會復制指定LSN之后的所有數據頁
$ innobackupex --user=DBUSER --password=DBUSERPASS -target-dir=/data/backups/1 --incremental-basedir=/data/backups/2016-10-25_00-00-09/
1目錄下回有增量備份新目錄
然后再創建一個增量備份
在增量備份1的基礎上再創建一個增量備份,記為增量備份2。
$ innobackupex --user=DBUSER --password=DBUSERPASS -target-dir=/data/backups/2 --incremental-basedir=/data/backups/1/2016-10-25_10-10-11/
增量備份替代方法
#可以使用指定—incremental-lsn來代替—incremental-basedir的方法創建增量備份。
#innobackupex --incremental /data/backups --incremental-lsn=1291135
#innobackupex --incremental /data/backups --incremental-lsn=1358967
---6.恢復數據
預備增量備份
1.需要先預備全備,但是只重做已提交事務,不回滾未提交事務,然后應用到全備,也是只重做已提交事務,不回滾未提交事務
2.回滾未提交事務
如果已經回滾了未提交事務,那么就無法再應用增量備份
在全備上,使用—redo-only只做已提交事務,不回滾未提交事務
innobackupex --apply-log --redo-only /data/backups/2016-10-25_00-00-09
應用第一個增量備份
innobackupex --apply-log --redo-only /data/backups/2016-10-25_00-00-09 --incremental-dir=/data/backups/1/2016-10-25_10-10-11/
應用第二個增量備份
innobackupex --apply-log /data/backups/2016-10-25_00-00-09 --incremental-dir=/data/backups/2/2016-10-25_16-30-32/
輸出結果,注意LSN的變化:
162026 22:08:43 InnoDB: Shutdown completed; log sequence number 1358967
161026 22:08:43 innobackupex: completed OK!
回滾未提交事務
當應用完所有增量備份的時候,就需要回滾所有為完成事務(如果最后一步加了 –redo-only就需要回滾未提交,不執行的話在服務啟動階段服務會處理未提交事務)。
innobackupex --apply-log /data/backups/2016-10-25_00-00-09
還原操作
service mysqld stop
刪除數據庫數據目錄下的所有數據或者備份數據目錄下的所有數據
還原:
innobackupex --copy-back /data/backups/2016-10-25_00-00-09
改變數據庫目錄權限
chown -R mysql:mysql data/mysqldb
啟動數據庫
service mysqld start
恢復順序:
# 全備應用日志
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/
# 第一次的增量備份應用日志,應用完日志后,將合并到全備上,恢復使用全備恢復
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-45-06/
# 將第二次增量備份應用日志并合并到全備上
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-46-33/
# 此時兩次增量備份其實都合并到全備上了,恢復是只需要使用全備進行恢復就可以了
# 模擬數據故障[刪除數據庫的數據目錄,執行如下命令還原]
[root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-01-11_15-37-31/
# 恢復后的數據默認權限是有問題的,所以需要修改數據目錄權限,如下
[root@client103 ~]# chown -R mysql:mysql /var/lib/mysql/
# 此時數據恢復完成,重啟數據庫服務,進行測試就可以了。大家自行測試,有問題留言反饋!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。