xtrabackup+MySQL8全備+增備腳本


問題描述:運用xtrabackup進行mysql全備,mysql8之前使用的是innodbxtrabackup,mysql8之后開始使用xtrabackup,innobackupex把功能都集成到xtrabackup中。

腳本在備庫上實現每周末零點進行全備,周一到周六凌晨一點進行增備!

 

這里下載地址很奇怪,為什么有的人就可以打開下載列表,我這里打開就是空的

下載地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/ 

 

 

空的:

xtrabackup安裝步驟,解壓即用,我安裝的是tar包,8.0.27高版本向下mysql8.0的兼容

 

 

 

 

 

全備腳本:

mysql_full_bakcup.sh

#一主兩備集群,在從庫上進行備份,如果從庫同步失敗,備份停止,備份用戶還要用查看復制狀態的權限
#!/bin/bash
# MySQL backup script
# Copyright (c) 2022 hzh
# Version: 1.0
# mkdir -pv /backup/{33306,backuplog,scripts}
date=`date +%F` #當前時間變量 backupDir=/backup/33306 #備份路徑 target_dir=/backup/$date #全備路徑變量 xtrDir=/root/percona-xtrabackup/bin/xtrabackup #xtrabackup啟動環境變量 mysqlDir=/usr/local/mysql8/bin/mysql #mysql啟動環境變量 backupLog=$backupDir/backuplog #備份日志目錄 mysql_host=192.168.163.21 #備份host mysql_port=33310 #端口 mysql_user=root #用戶 mysql_password=123456 #密碼 mysql_socket=/data/mysql10/db_dxpt10/mysql.sock #socket mysql_cnf=/data/mysql10/db_dxpt10/conf/dxpt10.cnf #配置文件 show_slave_status=`"$mysqlDir" -S"$mysql_socket" -P"$mysql_port" -u"$mysql_user" -p"$mysql_password" -A -e 'show slave status\G;' 2>/dev/null` #獲取slave狀態 slave_sql_running_state=`echo "$show_slave_status" |grep Slave_SQL_Running_State |awk -F ': ' '{print $2}'` #Slave上SQL運行狀態 ms_status=`echo "$show_slave_status" |grep Running: |awk -F ': ' '{if($2=="Yes"){sum += 1}}; END{print sum}'` #IO、SQL線程運行狀態:2表示健康,!2表示不健康 if [ $ms_status -eq 2 ]; #檢查mysql復制狀態 then echo =========================Run full backup beginning========================== >>$backupLog/backup_full_success.log 2>&1 $xtrDir --defaults-file=$mysql_cnf --user=$mysql_user --password=$mysql_password --socket=$mysql_socket --compress --compress-threads=2 --backup --target-dir=$target_dir >>$backupLog/backup_full_success.log 2>&1 echo =========================Run full backup finished successfully========================== >>$backupLog/backup_full_success.log 2>&1 #如果需要 發送郵件 else echo =========================Error,the synchronization may fail. Locate the cause========================== >> $backupLog/backup_failed.log 2>&1 #如果需要 發送郵件 fi #刪除兩周前備份 #find $backupDir -maxdepth 1 -type d -mtime +14 -exec rm -Rf {} \; >>$backupLog/deleted_record.log  2>&1

 

 增備腳本:

mysql_incremental_backup.sh

#一主兩備集群,在從庫上進行備份,如果從庫同步失敗,備份停止,備份用戶還要用查看復制狀態的權限
#!/bin/bash
# MySQL backup script
# Copyright (c) 2022 hzh
# Version: 1.0

date=`date +%F` datenum=`date -d "1 days ago" +%F` #當前時間變量 cur_dateTime=$(date "+%Y-%m-%d %H:%M:%S") backupDir=/backup/33306 #備份路徑 target_dir=/backup/$date #全備路徑變量 xtrDir=/root/percona-xtrabackup/bin/xtrabackup #xtrabackup啟動環境變量 mysqlDir=/usr/local/mysql8/bin/mysql #mysql啟動環境變量 backupLog=$backupDir/backuplog mysql_host=192.168.163.21 #host mysql_port=33310 #端口 mysql_user=root #用戶 mysql_password=123456 #密碼 mysql_socket=/data/mysql10/db_dxpt10/mysql.sock #socket mysql_cnf=/data/mysql10/db_dxpt10/conf/dxpt10.cnf #配置文件 show_slave_status=`"$mysqlDir" -S"$mysql_socket" -P"$mysql_port" -u"$mysql_user" -p"$mysql_password" -A -e 'show slave status\G;' 2>/dev/null` #獲取slave狀態 slave_sql_running_state=`echo "$show_slave_status" |grep Slave_SQL_Running_State |awk -F ': ' '{print $2}'` #Slave上SQL運行狀態 ms_status=`echo "$show_slave_status" |grep Running: |awk -F ': ' '{if($2=="Yes"){sum += 1}}; END{print sum}'` #IO、SQL線程運行狀態:2表示健康,!2表示不健康 if [ $ms_status -eq 2 ]; #檢查mysql復制狀態 then echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1 echo =========================Run incremental backup beginning========================== >>$backupLog/backup_incr_success.log 2>&1 $xtrDir --defaults-file=$mysql_cnf --port=$mysql_port --user=$mysql_user --password=$mysql_password --socket=$mysql_socket --compress --compress-threads=2 --backup --target-dir=$target_dir --incremental-basedir=$backupDir/$datenum >> $backupLog/backup_incr_success.log 2>&1 echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1 echo =========================Run incremental backup finished successfully========================== >>$backupLog/backup_incr_success.log 2>&1 #發送郵件 else echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1 echo =========================Error,the synchronization may fail. Locate the cause========================== >> $backupLog/backup_incr_failed.log 2>&1 #發送郵件 fi #刪除兩周前備份 #find $backupDir -maxdepth 1 -type d -mtime +14 -exec rm -Rf {} \; >>$backupLog/deleted_record.log  2>&1

 

配合定時任務使用

0 0 * * 7 sh /backup/scripts/mysql_full_backup.sh
0 1 * * 1-6 sh /backup/scripts/mysql_incremental_backup.sh

 

以上腳本都是使用root用戶進行備份,有些生產限制這個,要換成專門的備份用戶,但是我這邊測試使用備份用戶全備出來的內容跟root全備的內容不一樣,要不然增備的時候出岔子,所以使用了root用戶代替

創建備份用戶
create user backuper@'localhost' identified by 'i6+MgKFN';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT,SUPER ON *.* TO 'backuper'@'localhost';
grant create,insert,select on percona_schema.* to 'backuper'@'localhost';
flush privileges;

 

腳本中還是用的是qp壓縮方式,如果想要解壓備份,還需要安裝qp解壓工具

下載鏈接:http://www.quicklz.com/qpress-11-source.zip

 

--解壓.qb文件
[root@ ~]# cd /backup/33306/備份目錄 
[root@ ~]# for qp in `find . -iname "*\.qp"`; do /usr/local/bin/qpress -d $qp $(dirname $qp) && rm $qp; done 

 

文中細節,歡迎指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM