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='123456'
dbsocket="/tmp/mysql3306.sock"
dbport=3306
dbdefaultsfile=/etc/my.cnf
 
back_dir=/var/mysqlBackups
#备份日志文件
back_log=${back_dir}/mysql_back.log
#备份时分:
dbHour=`date +"%H-%M"`
#完整备份的时点
fullBackupTime=`date +"%F_00-00"`
 
#日志记录函数
function log(){
        echo "`date` $1" | tee -a ${back_log}
}
 
if [ ${dbHour} = "00-00" ];then
#完整备份
        #每天删除前一天备份日志
        rm -f ${back_log}
        log "`date` 开始每天完全备份..."
        innobackupex --defaults-file=${dbdefaultsfile} --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 --defaults-file=${dbdefaultsfile} --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 $?

四.    布置备份定时任务

$ Crontab –e

猜你喜欢

转载自blog.csdn.net/zhoujunah/article/details/80033324