MySQL定时备份及清理脚本(一劳永逸)

一、创建备份路径

        cd /mysql-backup

        mkdir back

        cd back

二、创建日志文件

        vi mysql-backlog.log

        内容为空,保存

三、创建备份脚本

        vi save-all-data.sh

        #全量备份

        source /etc/profile # 加载系统环境变量

        source ~/.bash_profile # 加载用户环境变量

        # 定义全局变量

        #登录数据库用户名

        user="root"

        #访问数据库密码

        password="123456"

        #访问地址

        host="127.0.0.1"

        #访问数据库端口

        port="3306"

        #备份数据库名称,多个数据库用空格进行间隔

        db=("user" "order" "role")

        local="--single-transaction"

        #数据库位置

        mysql_path="/var/bin/mysql"

        #备份地址

        backup_path="/mysql-backup/data"

        date=$(date +%Y%m%d_%H%M%S)

        day=30

        #日志路径

        backup_log="/mysql-backup/back/mysql-backlog.log"

        # 判断是否存在目录,不存在则创建目录

        if [ ! -e $backup_path ];then

        mkdir -p $backup_path

        fi

        # 删除30天以前备份

        find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1

        echo "开始备份数据库: ${db[*]}"

        # 备份数据库后压缩

        backup_sql(){

        dbname=$1

        #保存的文件名称

        backup_name="${dbname}_${date}.sql"

        mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --socket=/var/lib/mysql/mysql.sock --flush-logs -R $dbname > $backup_path/$backup_name

        if [[ $? == 0 ]];then

        cd $backup_path

        # tar --force-local参数压缩带有冒号的压缩包

        tar czvf $backup_name.tar.gz $backup_name --force-local

        size=$(du $backup_name.tar.gz -sh | awk '{print $1}')

        rm -rf $backup_name

        echo "$date 备份 $dbname($size) 成功"

        else

        cd $backup_path

        rm -rf $backup_name

        echo "$date 备份 $dbname 失败"

        fi

        }

        # 多个库循环备份

        length=${#db[@]}

        for ((i=0;i<$length;i++));do

        backup_sql ${db[i]} >> $backup_log 2>&1

        done

        echo "备份结束,结果查看 $backup_log"

        du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'

        保存脚本

四、脚本赋权

        sudo chmod +x save-all-data.sh

五、linux自带定时任务工具配置

        crontab用法:

                crontab -e 编辑工作表

                crontab -l 列出工作表中的命令

                crontab -r 删除工作表

        HELL=/bin/bash

        00 01 * * * /mysql-backup/back/save-all-data.sh

        sed -i 's/\r//g' 命令可以格式化sh文件,用法为:sed -i 's/\r//g' xxx.sh

        save-all-data.sh 指定12:20和01:00定时间点执行,数据库异地备份

        :wq保存文件即可

你可能感兴趣的:(MySQL,mysql,数据库,java)