• linux下mysql数据库进行备份脚本


    1.数据库备份 ,支持多数据库,清理过期备份数据

    执行以下脚本文件进行数据库备份,会当前目录下创建mysql文件夹进行备份操作

    需要注意的点:

    1.不要使用xftp等工具创建sh脚本,会有字符无法识别的异常,正确做法是使用vim命令创建sh脚本

    #编辑sh脚本
    vim mysqlback.sh

    2.备份时会锁表,尽量避免读写高峰期备份

    #!/bin/bash
    #功能说明:本功能用于备份
    #编写日期:2020/09/05
    
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
    export PATH
    #数据库用户名
    dbUser='root'
    #数据库密码
    dbPasswd='password'
    #数据库IP
    dbIp='192.168.0.1'
    #需要备份的数据库,多个数据库用空格分开
    dbName='test1 test2'
    #备份时间
    backtime=`date +%Y%m%d%H%M%S`
    #日志备份到当前路径mysql文件夹下
    logpath=$(pwd)/mysql/log
    #数据备份到当前路径mysql文件夹下
    datapath=$(pwd)/mysql/data
    #自动创建目录
    if [ ! -d ${logpath} ];then
        mkdir -pv ${logpath}
    fi
    #自动创建目录
    if [ ! -d ${datapath} ];then
        mkdir -pv ${datapath}
    fi
    #日志记录头部
    echo "备份时间为${backtime},备份数据库: ${dbName} 开始" >> ${logpath}/mysqllog.log
    echo "备份时间为${backtime},备份数据库: ${dbName} 开始"
    #正式备份数据库
    for table in $dbName; do
        echo "备份时间为${backtime},备份数据库: ${table} 备份开始!!" >> ${logpath}/mysqllog.log
        echo "备份时间为${backtime},备份数据库: ${table} 备份开始!!"
        source=`/usr/local/mysql/bin/mysqldump --skip-lock-tables -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${table} > ${datapath}/${backtime}-${table}.sql` 2>> ${logpath}/mysqllog.log;
        #备份成功以下操作
        if [ "$?" == 0 ];then
            cd $datapath
            #为节约硬盘空间,将数据库文件压缩,压缩需要时间,视sql文件大小决定,耐心等待即可
            tar zcvf ${backtime}-${table}.tar.gz ${backtime}-${table}.sql > /dev/null
            #删除原始文件,只留压缩后文件
            rm -f ${datapath}/${backtime}-${table}.sql
            echo "备份时间为${backtime},备份数据库: ${table} 备份成功!!" >> ${logpath}/mysqllog.log
            echo "备份时间为${backtime},备份数据库: ${table} 备份成功!!"
        else
            #备份失败则进行以下操作
            echo "备份时间为${backtime},备份数据库: ${table} 备份失败!!" >> ${logpath}/mysqllog.log
            echo "备份时间为${backtime},备份数据库: ${table} 备份失败!!"
        fi
    done
    
    #删除30天前备份,也就是只保存30天内的备份
    find $datapath -name "*.tar.gz" -type f -print -mtime +30 -exec rm -rf {} ; > /dev/null 2>&1

     执行成功后在当前路径下/mysql/data即可查看到备份的数据库压缩文件

    2.单数据库单表备份 ,支持多表备份,清理过期备份数据

    #!/bin/bash
    #功能说明:本功能用于备份
    #编写日期:2020/09/05
    
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
    export PATH
    #数据库用户名
    dbUser='root'
    #数据库密码
    dbPasswd='password'
    #数据库IP
    dbIp='192.168.0.1'
    #需要备份的数据库
    dbName='test1'
    #需要备份的数据库表,多个数据表用空格分开
    dbTableName='table1 table2'
    #备份时间
    DATA=`date +%Y-%m-%d`
    backTime=`date +%Y%m%d%H%M%S`
    #日志备份到当前路径mysql文件夹下
    logpath=$(pwd)/mysql/log
    #数据备份到当前路径mysql文件夹下
    datapath=$(pwd)/mysql/data/${DATA}-${dbName}-backfils
    #自动创建目录
    if [ ! -d ${logpath} ];then
        mkdir -pv ${logpath}
    fi
    #自动创建目录
    if [ ! -d ${datapath} ];then
        mkdir -pv ${datapath}
    fi
    #日志记录头部
    echo "备份时间为${backTime},备份数据库表: ${dbName}->${dbTableName} 开始" >> ${logpath}/mysqllog.log
    echo "备份时间为${backTime},备份数据库表: ${dbName}->${dbTableName} 开始"
    #正式备份数据库
    for table in $dbTableName; do
        source=`/usr/local/mysql/bin/mysqldump --skip-lock-tables -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${dbName} ${table} > ${datapath}/${backTime}-${dbName}-${table}.sql` 2>> ${logpath}/mysqllog.log;
        #备份成功以下操作
        if [ "$?" == 0 ];then
            cd $datapath
            #为节约硬盘空间,将数据库文件压缩,压缩需要时间,视sql文件大小决定,耐心等待即可
            tar zcvf ${backTime}-${table}.tar.gz ${backTime}-${dbName}-${table}.sql > /dev/null
            #删除原始文件,只留压缩后文件
            rm -f ${datapath}/${backTime}-${dbName}-${table}.sql
            echo "备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份成功!!" >> ${logpath}/mysqllog.log
            echo "备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份成功!!"
        else
            #备份失败则进行以下操作
            echo "备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份失败!!" >> ${logpath}/mysqllog.log
            echo "备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份失败!!"
        fi
    done
    
    #删除30天前备份,也就是只保存30天内的备份
    find $datapath -name "*backfils" -type d -print -mtime +30 -exec rm -rf {} ; > /dev/null 2>&1

    执行成功后在当前路径下/mysql/data即可查看到备份的数据库压缩文件

    3.定时运行备份

    查看当前服务器的定时任务

    crontab -e

    添加定时任务执行脚本,每天0点运行一次,根据业务需要调整时间

    0 0 0 1/1 * cd /home/mysqlback;./mysqlback.sh

     测试运行一下定时任务命令,查看是否运行正常

    cd /home/mysqlback;./mysqlback.sh

    运行后出现以下异常

    -bash: ./mysqlback.sh: Permission denied

    执行权限分配命令

    chmod u+x *.sh

    再次执行命令,备份成功

  • 相关阅读:
    浅尝辄止——在C++中调用C#的回调函数——COM方式
    代码管理——如何连接Git Server,下载代码
    浅尝辄止——使用ActiveX装载WPF控件
    软件调试——CPU异常列表
    软件调试——IA-32 保护模式下寄存器一览
    Delphi面向对象编程
    看雪2017CTF第二题解法
    串操作指令
    MASM 重复汇编
    MASM 宏结构
  • 原文地址:https://www.cnblogs.com/MrSong97/p/13626720.html
Copyright © 2020-2023  润新知