欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql基于mysqldump脚本的逻辑备份

程序员文章站 2022-12-21 08:43:14
#!/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_back....
#!/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

 

本文地址:https://blog.csdn.net/weixin_43321343/article/details/107338943