使用Xtrabackup備份MySQL資料庫
- 2019 年 10 月 4 日
- 筆記
Xtrabackup是 Percona公司開發的一款開源的能夠對innodb和xtradb資料庫引擎進行資料庫熱備的工具,支援MySQL、Percona server和MariaDB,是目前較為受歡迎的主流MySQL資料庫備份工具
Xtrabackup有如下幾大特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁碟空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;

XtraBackup 2.4版本官方下載地址
https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

下面演示使用Xtrabackup對CentOS7系統上的MySQL資料庫進行備份
先提前下載CentOS7版本的Xtrabackup RPM安裝包
https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.15/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm
1、下面使用mysql初始安裝腳本+編輯好的/etc/my.cnf MySQL配置文件進行安裝mysql資料庫,腳本如下

當然可以參考之前的文章進行MySQL的手動安裝——CentOS6下安裝MySQL5.7.25二進位版本
編寫的腳本比較簡單,可以忽略腳本的健壯性
#!/bin/sh
installMySQL_LOG="/root/installMySQL.log"
echo `date` >>$installMySQL_LOG
groupadd mysql >>$installMySQL_LOG 2>&1
useradd -g mysql -s /sbin/nologin mysql >>$installMySQL_LOG 2>&1
tar -zxf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql
cp -f ./my.cnf /etc/my.cnf
mkdir -p /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ >>$installMySQL_LOG 2>&1
chkconfig --add mysqld >>$installMySQL_LOG 2>&1
chkconfig mysqld on >>$installMySQL_LOG 2>&1
echo "PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
echo "export PATH">>/etc/profile
source /etc/profile
if [ ! -e /tmp/mysql.sock ];then
ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock >>$installMySQL_LOG 2>&1
fi
service mysqld stop
sed -i '2i skip-grant-tables' /etc/my.cnf
service mysqld start
/usr/local/mysql/bin/mysql -uroot -e"use mysql;update user set authentication_string = password('Admin@2019') where user = 'root';flush privileges;"
sed -i '/skip-grant-tables/d' /etc/my.cnf
/etc/init.d/mysqld restart >>$installMySQL_LOG 2>&1
/usr/local/mysql/bin/mysql --connect-expired-password -uroot -pAdmin@2019 -e"SET PASSWORD = PASSWORD('MySQL@2019');flush privileges;"
my.cnf配置文件內容如下

2、執行./installMySQL.sh 安裝MySQL

3、安裝完成後,導入測試資料庫腳本test.sql


4、使用常用mysql資料庫命令查看

5、表中插入幾條測試數據

6、接下來安裝Xtrabackup
上傳percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm
解決包依賴問題,採用yum localinstall -y percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm 進行安裝xtrabackup RPM包

7、接下來使用xtrabackup進行一次資料庫的全量備份
創建資料庫備份文件存放目錄並使用xtrabackup的命令innobackupex進行全量備份
mkdir /backup
innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock /backup

待全庫全量備份完成後,可以在/backup目錄下以日期時間命名的數據備份文件

8、下面模擬資料庫損壞,並使用xtrabackup進行恢復
假設刪掉資料庫的數據目錄
rm -rf /usr/local/mysql/data/

9、準備(prepare)一個完全備份
innobackupex --apply-log /backup/2019-09-14_23-00-01/
一般情況下,在備份完成後,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。"準備"的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態

10、還原全量備份
innobackupex --copy-back 從完全備份目錄中恢複數據
innobackupex --copy-back /backup/2019-09-14_23-00-01/

cd /usr/local/mysql/data/可以看到還原回來的資料庫數據文件

chown -R mysql.mysql /usr/local/mysql/data/ 修改屬主屬組為mysql.mysql
重啟mysqld服務後登錄資料庫驗證資料庫是否完全還原回來

可以看到資料庫全量備份還原成功
以上是Xtrabackup全量備份操作,下次介紹一下利用Xtrabackup進行增量備份