您的位置:首页 > 数据库

Xtrabackup定时备份数据库脚本

2017-09-18 14:18 453 查看


定时备份MySQL数据库


脚本内容:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

#!/bin/bash ## 备份计划任务## ## 每天凌晨1:30一次全量备份## 每天间隔1小时一次增量备份## 30 1 * * * backup.sh full## 00 * * * * backup.sh inc####  恢复数据步骤:##  (1)、查看备份日志,找到全量备份和增量备份的关系(注意增量备份的顺序)####  cat ${BACKUP_BASE_DIR}/${INC_BASE_LIST}##  (2)、全量备份##  innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir####  (3)、第一个增量##  innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir \##  --incremental-dir=${BACKUP_BASE_DIR}/one_inc_dir####  (4)、第二个增量##  innobackupex --defaults-file=/etc/my.cnf --apply-log ${BACKUP_BASE_DIR}/full_dir \##  --incremental-dir=${BACKUP_BASE_DIR}/two_inc_dir####  (5)、恢复数据##  innobackupex --defaults-file=/etc/my.cnf --copy-back ${BACKUP_BASE_DIR}/full_dir PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin BACKUP_BASE_DIR="/backup/xtrabackup"INC_BASE_LIST="${BACKUP_BASE_DIR}/inc_list.txt"XTRABACKUP_PATH="/usr/local/xtrabackup/bin/innobackupex" MYSQL_CNF="/etc/my.cnf"MYSQL_HOSTNAME=127.0.0.1MYSQL_USERNAME=rootMYSQL_PASSWORD=w7tQ5NNWWRk LOCK_FILE=/tmp/innobackupex.lockTHREAD=3 mkdir -p ${BACKUP_BASE_DIR}CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M)"[[ -d ${CURRENT_BACKUP_PATH} ]] && CURRENT_BACKUP_PATH="${BACKUP_BASE_DIR}/$(date +%F_%H-%M-%S)" print_help(){    echo "--------------------------------------------------------------"    echo "Usage: $0 full | inc | help               "    echo "--------------------------------------------------------------"    exit 1} [[ $# -lt 1 || "$1" == "help" ]] && print_help [[ -f "$LOCK_FILE" ]] && echo -e "Usage: rm -f $LOCK_FILE\nUsage: chattr -i $LOCK_FILE && rm -f $LOCK_FILE" && exit 1 FullBackup(){    touch $LOCK_FILE    chattr +i $LOCK_FILE    local rc=0    ${XTRABACKUP_PATH} \    --defaults-file=${MYSQL_CNF} \    --user=${MYSQL_USERNAME} \    --password=${MYSQL_PASSWORD} \    --host=${MYSQL_HOSTNAME} \    --parallel=${THREAD} \    --no-timestamp ${CURRENT_BACKUP_PATH} > ${CURRENT_BACKUP_PATH}_full.log 2>&1    grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_full.log > /dev/null 2>&1    if [ $? -ne 0 ];then        rc=1        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH}    else        echo "NULL|${CURRENT_BACKUP_PATH}|full" >> ${INC_BASE_LIST}        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1    fi    chattr -i ${LOCK_FILE}    rm -f $LOCK_FILE    chattr +a ${INC_BASE_LIST}    return $rc} IncBackup(){    touch $LOCK_FILE    chattr +i $LOCK_FILE    local rc=0    PREV_BACKUP_DIR=$(sed '/^$/d' ${INC_BASE_LIST} | tail -1 | awk -F '|' '{print $2}')    ${XTRABACKUP_PATH} \    --defaults-file=${MYSQL_CNF} \    --user=${MYSQL_USERNAME} \    --password=${MYSQL_PASSWORD} \    --host=${MYSQL_HOSTNAME} \    --no-timestamp --incremental ${CURRENT_BACKUP_PATH} \    --incremental-basedir=${PREV_BACKUP_DIR} > ${CURRENT_BACKUP_PATH}_inc.log 2>&1    grep ".*\ completed\ OK\!" ${CURRENT_BACKUP_PATH}_inc.log > /dev/null 2>&1    if [ $? -ne 0 ];then        rc=1        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && rm -rf ${CURRENT_BACKUP_PATH}    else        echo "${PREV_BACKUP_DIR}|${CURRENT_BACKUP_PATH}|inc" >> ${INC_BASE_LIST}        [[ -d ${CURRENT_BACKUP_PATH} && $(pwd) != "/" ]] && chattr +i ${CURRENT_BACKUP_PATH} || rc=1    fi    chattr -i ${LOCK_FILE}    rm -f $LOCK_FILE    chattr +a ${INC_BASE_LIST}    return $rc} ## 全量备份if [ "$1" == "full" ];then    FullBackupfi ## 增量备份if [ "$1" == "inc" ];then    ## 判断上一次备份是否存在,无则进行全量备份    if [[ ! -f ${INC_BASE_LIST} || $(sed '/^$/d' ${INC_BASE_LIST} | wc -l) -eq 0 ]];then        FullBackup    else        IncBackup    fifi ## 删除14天前的备份if [[ -d ${BACKUP_BASE_DIR} && $(pwd) != "/" ]];then    find ${BACKUP_BASE_DIR} -name "$(date -d '14 days ago' +'%F')_*" | xargs chattr -i    find ${BACKUP_BASE_DIR} -name "$(date -d '14 days ago' +'%F')_*" | xargs rm -rffi


加入计划任务

123

crontab -e30 1 * * * /home/sh/backup.sh full00 */6 * * * /home/sh/backup.sh inc

#
mysql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: