mysql基于mysqldump脚本的逻辑备份

#!/bin/bash
#自动备份脚本
# you can use like this:./backupShell.sh -u mysql -p dongvsql -d vhr -f /media/dongv/_dde_data/mysql/backup -l /media/dongv/_dde_data/mysql/backuplog/myql_backup.log
# https://github.com/toolzone/mysql_web_backup/blob/master/Mysql_backup.sh
# 当前问题:1.mysqldump在读取的时候会将表的写操作锁住
# -u    用户名
# -p    密码
# -d    数据库
# -f    输出路径
# -l    日志路径

#定义所需变量
BAKE_PATH="/media/dongv/_dde_data/mysql/backup"								#备份后存放目录
LOG_PATH="/media/dongv/_dde_data/mysql/backuplog/myql_backup.log"					#备份日志存放目录及日志名称
filename=""		           #备份存放文件名称
username=""                 #用户名
password=""                 #密码
database=""                 #数据库名称
table=""                    #表名称

# 参数化定制  -p是sql文件路径,-l是日志文件路径,-n是文件名称(包含压缩过后以及导出为sql文件的名称)
while [ -n "$1" ]
do
    case "$1" in
        -u)username="$2"
           echo "the username is :${username}"
           ;;
        -p)password="$2"
           echo "the password is:${password}"
           ;;
        -d)database="$2"
           echo "the database is:${database}"
           ;;
        -t)table="$2"
           echo "the table is:${table}"
           ;;
        -f)BAKE_PATH="$2"
           echo "the backPath is:${BAKE_PATH}"
           ;;
        -l)LOG_PATH="$2"
           echo "the logPath is:${LOG_PATH}"
           ;;
#     esac是作为case的结尾
    esac
#     shift在这里是调转下一个入参
    shift
done

filename="`date '+%Y-%m-%d%H:%M:%S'`_${database}.tar.gz"		#压缩包文件

sqlfile="`date '+%Y-%m-%d%H:%M:%S'`_${database}.sql"         #导出的sql文件

to_file="${BAKE_PATH}/${filename}"

#备份失败退出
ERR_QUIT=1

#自动删除删除超期文件
#保留30多少天前的文件
OVERTIME=30
#删除超期文件
find $BAKE_PATH -ctime +$OVERTIME -a -name "*${database}.tar.gz" -exec rm -f {} \;
if [ $? -eq 0 ];then
        echo -e "`date '+%Y-%m-%d%H:%M:%S'`\t删除过期文件成功">>$LOG_PATH
#调试时输出日志信息
#       tail -1 $LOG_PATH
fi

#进行备份操作
echo "the backPath is: ${BAKE_PATH}"
echo "the sqlfile is :${sqlfile},username:${username},password:${password},database:${database}"
mysqldump -u $username -p$password $database > "${BAKE_PATH}/${sqlfile}"
#将生成的SQL文件压缩
echo "tarfile:${to_file}"
echo "sqlfile:${BAKE_PATH}/${sqlfile}"
tar zcf $to_file "${BAKE_PATH}/${sqlfile}" &> /dev/null
#echo $?

#判断是否备份成功
if [ $? -eq 0 ]; then
        echo -e "`date '+%Y-%m-%d%H:%M:%S'`\t备份成功">>$LOG_PATH
	#备份成功删除生成的SQL文件,保留压缩包
	rm -rf $sqlfile
else
        echo -e "`date '+%Y-%m-%d%H:%M:%S'`\t备份失败">>$LOG_PATH

        exit $ERR_QUIT
fi

#空间占用百分比
echo "log:${LOG_PATH}"
percent=$(df $BAKE_PATH |awk '/dev/{print $5}')
echo -e "当前空间的占用百分比:$percent">>$LOG_PATH
#输出日志信息
echo "logfile:${LOG_PATH}"
tail -2 $LOG_PATH

 

你可能感兴趣的:(mysql)