mysql備份腳本,每天執行一次全量備份,三次增量備份


線上一個小業務的mysql備份

全量備份

#!/bin/bash
#crete by hexm at 2016-10-02
#scripte name : full_backup.sh
#descriptioni :  mysql full backup. oneday at a time.

#time info
date=`date +%Y%m%d`
#time_now1=`date +%Y%m%d-%H:%M:%S`

#dir info
BACKUP_DIR="/app/dbbackup/full_backup/"
today_dir="/app/dbbackup/full_backup/${date}"
LOG=/app/dbbackup/logs/dumpfull_${date}.txt
if [ ! -d "${BACKUP_DIR}" ]; then
  mkdir -p "${BACKUP_DIR}"
fi
if [ ! -d "${today_dir}" ]; then
  mkdir -p "${today_dir}"
fi


echo `date +%Y%m%d%H%M%S` > ${today_dir}/time.txt
# 循環databases數組
time_now1=`date +%Y%m%d-%H:%M:%S`
echo "${time_now1} start to full backup" >> ${LOG}
for db in `/usr/local/mysql/bin/mysql -uroot -pwoyoudabaitu -e 'show databases'|grep -Ev "mysql|test|performance_schema|information_schema|Database"`
do
    # 備份數據庫生成SQL文件
    #/bin/nice -n 19 /usr/local/mysql/bin/mysqldump -uroot -pwoyou --database $db > ${today_dir}${db}-$(date +%Y%m%d).sql
    /bin/nice -n 19 //usr/local/mysql/bin/mysqldump -uroot -pwoyou --database --flush-privileges --master-data --single-transaction --opt $db > ${today_dir}/${db}-${date}.sql
done

time_now2=`date +%Y%m%d-%H:%M:%S`
echo "${time_now2} full backup successfull" >> $LOG


#get position
sleep 2

if [ -f "${today_dir}/db_179_act-${date}.sql" ]; then
  sed -n '22p' ${today_dir}/db_179_act-${date}.sql |awk -F"[! ]" '{print $4,$10}' > $today_dir/position
  echo "${time_now2} get position ok!" >> $LOG
else
  time_now3=`date +%Y%m%d-%H:%M:%S`
  echo "${time_now3} get position faild" >> $LOG
  #$SEND_MSG
fi

#remove 1 days ago backup.
find $BACKUP_DIR  -mtime +7 -delete
#echo "remove 1 days ago full backup!" >> $LOG

增量備份

#!/bin/bash
#crete by hexm at 2016-10-03
#scripte name : increment_backup.sh
#descriptioni :  mysql increment backup. 6 hours at a time.


#time info
date=`date +%Y%m%d`
time_hour=`date +%Y%m%d%H`
#time_now1=`date +%Y%m%d-%H:%M:%S`

#dir info
BACKUP_DIR=/app/dbbackup/increment_backup/
LOG=/app/dbbackup/logs/dumpincr_${date}.txt
#TIME_DIR=/app/dbbackup/full_backup/${time_hour}
if [ ! -d "${BACKUP_DIR}" ]; then
  mkdir -p "${BACKUP_DIR}"
fi

time_now1=`date +%Y%m%d-%H:%M:%S`
echo "${time_now1} start to increment backup" >> ${LOG}


cd /app/mysql.bin
tar cf ${time_hour}_mysql_bin.tar.gz *
wait
mv /app/mysql.bin/*.tar.gz ${BACKUP_DIR}
cd

ls ${BACKUP_DIR}/${time_hour}_mysql_bin.tar.gz &> /dev/null

if [ $? -eq 0 ];then
  time_now2=`date +%Y%m%d-%H:%M:%S`
  echo "${time_now2} increment backup successfull" >> $LOG
else
  echo "${time_now2} increment backup faild" >> $LOG
  #SEND_MSG
fi

#remove 1 days ago backup.
#find $BACKUP_DIR  -mtime +7 -delete
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
#echo "remove 1 days ago increment backup!" >> $LOG

定時任務

#mysqldump backup mysql 
00 02 * * * /bin/bash /app/bin/full_backup.sh & &>/dev/null
00 08 * * * /bin/bash /app/bin/increment_backup.sh & &>/dev/null
00 14 * * * /bin/bash /app/bin/increment_backup.sh & &>/dev/null
00 20 * * * /bin/bash /app/bin/increment_backup.sh & &>/dev/null

 


免責聲明!

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



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