• MySQL备份脚本


    ✏️ 通过mysqldump备份数据库


    通过计划任务备份数据库,保留指定天数的数据


    #!/bin/bash
    #Desc: 用于进行数据库备份,基于旧版优化
    #Date: 2020-06-19
    #By: yanjie.li
    
    # 运行脚本前先创建一个备份用户,并授予权限  (建议创建一个专用的备份用户,尽量不要使用root用户)
    # mysql> grant select,insert,lock tables,show view,trigger  on *.* to back@localhost identified by "oodaeh7phoe1iboh7Jua";
    # mysql> flush privileges;
    
    back_user_name=root                     #备份账号
    back_user_pass=oodaeh7phoe1iboh7Jua     #备份账号密码
    back_path=/data/mysql_backup            #备份数据存放路径
    back_date=`date +%F-%H`                 #备份日期
    back_day=5                              #备份保留的天数
    
    
    # --------------------获取mysql中的数据库名--------------------
    #这里默认没有备份系统默认自带库:information_schema、performance_schema、mysql、test库。
    /usr/bin/mysql -u ${back_user_name} -p${back_user_pass} -e "show databases;" |grep -v Database |grep -v information_schema |grep -v performance_schema |grep -v "^mysql$" |grep -v "^test$" > /tmp/DBname
    
    # --------------------数据库备份--mysqldump备份--------------------
    function MysQLBack () {
        #创建备份目录
        if [ ! -d "${back_path}/${back_date}" ];then
            mkdir -p ${back_path}/${back_date}
        fi
    
        echo "--------------------${back_date}--------------------" >> ${back_path}/mysql_back.log
    	#循环备份每个库
        for db_name in `cat /tmp/DBname`; do
            /usr/bin/mysqldump --routines --triggers -u ${back_user_name} -p${back_user_pass} ${db_name} > ${back_path}/${back_date}/${db_name}-${back_date}.sql
            if [ $? -eq 0 ];then
                echo "$db_name   Back   OK!" >> ${back_path}/mysql_back.log
            else
                echo "$db_name   Back   ERROR!" >> ${back_path}/mysql_back.log
            fi
        done
        echo "" >> ${back_path}/mysql_back.log
    }
    
    MysQLBack
    
    # --------------------删除自定义保留天数之前的备份数据,并随机保留两份--------------------
    find /data/mysql_backup/ -maxdepth 1 -type d -and -ctime +${back_day} > /tmp/alldirname    #找出保留天数之前的数据
    # 过滤出所有的数据备份目录 如:2020-06-12-06
    for dir_name in `cat /tmp/alldirname`; do
        if echo ${dir_name} |grep "[0-9]" >> /dev/null ; then
            echo ${dir_name} >> /tmp/delfile
        fi
    done
    
    # 随机保留两份
    if [ ! -d "${back_path}/Oldest/" ];then  mkdir -p ${back_path}/Oldest/ ; fi
    if [ -f "/tmp/delfile" ]; then
        for save in `cat /tmp/delfile |sort -R |head -n2`; do
            if [ -d ${save} ]; then
                cp -r ${save} ${back_path}/Oldest/
            fi
        done
    
        # 删除自定义保留天数之前的备份数据
        for del in `cat /tmp/delfile`; do
            if [ -d ${del} ]; then
                rm -rf ${del}
            fi
        done
    fi
    
    # 删除临时文件
    rm -f /tmp/delfile && rm -f /tmp/alldirname && rm -f /tmp/DBname
    
  • 相关阅读:
    将当前日期转换成年-月- 日格式
    js修改title
    Window.open()方法参数详解总结(转)
    js(jQuery)获取时间的方法及常用时间类
    用express搭建一个简单的博客系统
    字符串、数组相互转换 对象转换为数组的方法
    多文件上传 input 的multiple 属性
    关于iframe的使用 以及自适应页面高度
    浏览器转换为兼容模式
    分类算法之随机森林
  • 原文地址:https://www.cnblogs.com/yanjieli/p/13162873.html
Copyright © 2020-2023  润新知