Mysql 5.6自动备份脚本-单独备份表

这里写目录标题

  • Mysql 5.6自动备份脚本
    • 1. 编辑my.cnf文件(/etc/my.cnf),在mysqldump项下添加
    • 2. 定义一些基本信息
    • 3. 判断备份文件存储目录是否存在,否则创建该目录
    • 4. 开始备份之前,将备份信息头写入日记文件
    • 5. 切换至备份目录 ,使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
    • 6. 判断数据库备份是否成功
    • 7. 保留最近30份备份文件
    • 8. 重启mysql
    • 8. crontab 定时备份

Mysql 5.6自动备份脚本

注:Mysql5.6以后mysqldump需要在配置文件中添加账户密码

1. 编辑my.cnf文件(/etc/my.cnf),在mysqldump项下添加

[mysqldump]
user=username
password=password

2. 定义一些基本信息

#!/bin/bash
DATABASE="test"   #需要备份的库
HOSTNAME="localhost"  
TABLEA="t_log_1"  需要单独备份的表1
TABLEP="t_log_2"  需要单独备份的表2
TABLEW="t_log_3"  需要单独备份的表3 
TA="ta" 
TP="tp"
TW="tw"   
BACKUP_DIR=/data/backup/  #备份文件存储路径  (数据库的大部分表)
LOGFILE=/data/backup/data_backup.log  #日记文件路径
DATE=`date '+%Y%m%d-%H%M'` #日期格式(作为文件名)  
DUMPFILE=$DATE.sql #备份文件名  (数据库的大部分表)
ALARM=$TA$DATE.sql
PRINTERMETER=$TP$DATE.sql
WEBREQASK=$TW$DATE.sql
ARCHIVE=$DATE.sql.tgz #压缩文件名  
ALARMTGZ=$ALARM.tgz
PRINTERMETERTGZ=$PRINTERMETER.tgz
WEBREQASKTGZ=$WEBREQASK.tgz
IGNORE="--ignore-table=$DATABASE.$TABLEA --ignore-table=$DATABASE.$TABLEP --ignore-table=$DATABASE.$TABLEW"  #需要忽略的表
FOREC="--force"   #不管是否遇到错误,强制继续插入数据

3. 判断备份文件存储目录是否存在,否则创建该目录

if [ ! -d $BACKUP_DIR ] ;  
then  
        mkdir -p "$BACKUP_DIR"  
fi  

4. 开始备份之前,将备份信息头写入日记文件

echo " " >> $LOGFILE  
echo " " >> $LOGFILE  
echo "———————————————–" >> $LOGFILE  
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE  
echo "———————————————– " >> $LOGFILE  

5. 切换至备份目录 ,使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件

mysqldump $DATABASE $IGNORE $FOREC > $DUMPFILE   #备份除表1、表2、表3外的所有表
mysqldump $DATABASE $TABLEA > $ALARM  #单独备份表1
mysqldump $DATABASE $TABLEP > $PRINTERMETER #单独备份的表2
mysqldump $DATABASE $TABLEW > $WEBREQASK  #单独备份的表3

6. 判断数据库备份是否成功

if [ $? -eq 0 ] ; then
    #创建备份文件的压缩包   
    tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1  
    #输入备份成功的消息到日记文件   
    echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE  
    #删除原始备份文件,只需保 留数据库备份文件的压缩包即可   
    rm -f $DUMPFILE
	
	tar czvf $ALARMTGZ $ALARM >> $LOGFILE 2>&1  
    #输入备份成功的消息到日记文件   
    echo "[$ALARMTGZ] Backup Successful!" >> $LOGFILE  
    #删除原始备份文件,只需保 留数据库备份文件的压缩包即可   
    rm -f $ALARM 
	
	tar czvf $PRINTERMETERTGZ $PRINTERMETER >> $LOGFILE 2>&1  
    #输入备份成功的消息到日记文件   
    echo "[$PRINTERMETERTGZ] Backup Successful!" >> $LOGFILE  
    #删除原始备份文件,只需保 留数据库备份文件的压缩包即可   
    rm -f $PRINTERMETER 
	
	tar czvf $WEBREQASKTGZ $WEBREQASK >> $LOGFILE 2>&1  
    #输入备份成功的消息到日记文件   
    echo "[$WEBREQASKTGZ] Backup Successful!" >> $LOGFILE  
    #删除原始备份文件,只需保 留数据库备份文件的压缩包即可   
    rm -f $WEBREQASK 
else  
    echo " Backup Fail!">> $LOGFILE  
fi  
#输出备份过程结束的提醒消息   
echo "Backup Process Done"

7. 保留最近30份备份文件

tmpfiles=`ls -lt  |grep 'sql.tgz' | awk 'BEGIN {FS=" "} NR > 30  {print $NF}'` 
delfiles=""
for myfile in  $tmpfiles
do
	 delfiles="$delfiles $myfile"
done 

if [ "X$delfiles" != "X" ] ; then    
    rm -f $delfiles    
    if [ $? -eq 0 ] ;then   		
   		echo " delete bak file [ $delfiles ] susccefully!" >> $LOGFILE     		   	       
    else    
    	echo " delete bak file [ $delfiles ] failed!"     >> $LOGFILE  
    fi  
fi

8. 重启mysql

service mysqld restart #(CentOS6)
systemctl restart mysql #(CentOS7)

8. crontab 定时备份

00 00 * * * /script/autobackupmysql.sh #每天0点执行脚本

你可能感兴趣的:(Mysql 5.6自动备份脚本-单独备份表)