天天看點

Percona-xtrabackup——mysql備份二.    備份準備三.    備份腳本四.    部署備份定時任務

Percona-xtrabackup——mysql備份

一.     備份政策

  資料庫備份,尤其生産庫備份政策需要考慮到如下四點:

  •  資料丢失最少
  •  資料庫性能影響最小
  •  硬碟空間使用最少
  • 資料庫恢複時間最少

資料丢失最少,主要是保證在資料庫在當機、硬碟毀壞等不可避免的情況下,能夠最大可能的保證資料不丢失;資料庫性能影響最小,空間使用最小,就需要考慮全備+增量備份;資料恢複時間不僅要考慮資料庫的還原時間,還需要考慮資料庫檔案轉移拷貝的時間。

結合以上情況,制定備份政策如下:

  • l  每天0點進行一次全備
  • l  每隔5分鐘進行一次增量備份
  • l  先備份到本機,再分别将備份檔案拷貝到本機房不同機器上,異地機房的伺服器上,保有三份備份檔案

異機拷貝,及備份檔案拷貝到異地伺服器涉及到檔案轉移方案,将不再本文中叙述。本文僅僅叙述本機備份方案。

二.    備份準備

2.1  建立備份賬戶

備份使用上文安裝的percona-xtrabackup進行熱備,首先需要準備一個mysql備份賬戶,并給予備份需要的最小權限。

>create user 'backupMyDB' identified by '123456';
> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backupMyDB'@'localhost'
>flush privileges;
           

上面腳本在mysql中建立了backupMyDB賬戶,密碼123456,并給予RELOAD,PROCESS, LOCK TABLES,REPLICATION CLIENT 權限

2.2  建立備份目錄

$ sudo mkdir /var/mysqlBackups/
           

在/var/下建立mysqlBackups檔案夾,用于放資料庫備份檔案。

三.    備份腳本

其他不多贅述,直接上腳本

$ vim /var/dayBackup
           

備份腳本

#!/bin/bash
#mysql 熱備腳本,Version:1.0
#Author:Jack
#備份政策:每天0點進行完整備份,以後每隔5分鐘在前一次備份的基礎上進行增量備份
#第一次差備是基于全備的
#以後每一次差備都是基于前一次的備份的差異
#備份針對執行個體上所有資料庫,包括系統資料庫

#備份資料庫資訊
host="localhost"
dbuser="backupMyDB"
dbpasswd='T+fh!Hm+2kujN+'
dbsocket="/tmp/mysql3306.sock"
dbport=3306

back_dir=/var/mysqlBackups
#備份日志檔案
back_log=${back_dir}/mysql_back.log
#當天日期
today=`date +%F`
#備份時分:
dbHour=`date +"%H-%M"`
#完整備份的時點
fullBackupTime=`date +"%F_00-00"`

#日志記錄函數
function log(){
        echo "`date` $1" | tee -a ${back_log}
}

if [ ${dbHour} = "00-00" ] || [ `find ${back_dir} -type d -name "${today}*" | wc -l` eq 0 ];then
#完整備份
        #每天删除前一天備份日志
        rm -f ${back_log}
        log "`date` 開始每天完全備份..."
        innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} --port=${dbport} --socket=${dbsocket} ${back_dir} &>> ${back_log}
        if [ $? -eq 0 ];then
                log "`date`完全備份完畢。"
        else
                log "完全備份出錯,請檢查。"
                exit 1
        fi
        #清除一周前的備份檔案
        sevenDayAgo=`date +%F -d "7 days ago"`
        rm -rf `find ${back_dir} -type d -name "${sevenDayAgo}*"`
else
        let dir_num=`find ${back_dir} -type d -name "${lastFiveMinute}*" | wc -l`
        if [ ${dir_num} -ne 1 ];then
                log "上個5分鐘增量目錄未找到或上個5分鐘備份目錄大于等于2個,請确認後再次備份。"
                exit 1
        fi
        incremental_dir=`find ${back_dir} -type d -name "${lastFiveMinute}*"`
        log "`date` 開始增量備份..."
        #增量備份
        innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} --port=${dbport} --socket=${dbsocket} --incremental ${back_dir} --incremental-basedir=${incremental_dir} &>> ${back_log}
        if [ $? -eq 0 ];then
                log "`date` 增量備份成功。"
        else
                log "增量備份失敗,請檢查日志..."
                exit 1
        fi
fi
exit $?
           

該腳本需要調整的部分為資料庫資訊部分,mysql資料庫配置檔案my.cnf,資料庫socket的檔案路徑,端口

innobackup隻能備份資料庫相關檔案,如果資料庫data目錄下還存儲有其他檔案,需要手動備份

四.    部署備份定時任務

$ Crontab –e
           
Percona-xtrabackup——mysql備份二.    備份準備三.    備份腳本四.    部署備份定時任務

繼續閱讀