• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Shell脚本自动备份MySQL到FTP并定期清理过期备份

    以前公司用的一个网上找的MySQL自动备份到FTP的Shell脚本,一直用着不错。但是问题就是随着备份文件的越来越多,不得不定期清理FTP上的老备份文件,十分的不便。

    实际上MySQL备份无需保留太长时间的,如果能有自动清理旧的备份文件的功能就好了。不过网上找了一下,虽然也有这方面的脚本,不过可能不太符合我的需求吧。于是只能自己手动改下以前的那个Shell脚本来实现咯。

    首先我们要确定保留备份的时间,我觉得一个月的备份保留就足够了。因为基本不会出现1个月后要恢复1个月之前备份的情况。(如果有请自己手动备份,毕竟自动备份还是不能取代手动备份的部分)。那么我们的思路就出来了:在上传以当天日期为文件名的备份的时候,顺便删除下一个月之前的同日期备份,就可以确保服务器上保留的是最近一个月的备份了。

    然后我们需要知道Linux下的一个命令:date。这是个可以查看当前服务器的时间日期信息的命令。当然这里我们需要知道的是这个命令的参数,毕竟我们需要得到的是日期部分。

    输入下面这个命令,可以看到“年-月-日”的输入,类似“2011-09-09”:

    复制代码 代码如下:

    date +%Y-%m-%d

    那么,如果我们要得到1个月之前的日期怎么办呢?使用下面的这条命令就可以得到:

    复制代码 代码如下:

    date -d last-month +%Y-%m-%d

    怎么样?简单吧。实际备份的时候,因为之前脚本使用的是“m-d-Y”的形式,也就是“月-日-年”的形式,所以我稍微做了下调整。但是下面这个Shell脚本中的是按照“年-月-日”来产生文件名的。

    于是,给出整个备份Shell脚本,需要的朋友只需要填写下有中文说明的部分,即可在自己的Linux服务器上使用。使用办法:复制到某个目录下,然后给予执行权限,再在cron中设置每天指定时间运行即可。(关于这部分,请自行查找相关说明,这里不再复述)

    带自动清理功能的MySQL备份到FTP的Shell脚本如下:

    复制代码 代码如下:

    #!/bin/bash
     
    MyUSER="db_username"     # 数据库用户名,建议使用root账户或者拥有全局权限的用户名
    MyPASS="db_password"       # 数据库密码
    MyHOST="localhost"          # 数据库服务器
     
    # Linux bin paths, change this if it can't be autodetected via which command
    MYSQL="$(which mysql)"
    MYSQLDUMP="$(which mysqldump)"
    CHOWN="$(which chown)"
    CHMOD="$(which chmod)"
    GZIP="$(which gzip)"
     
    # 数据库备份的路径
    DEST="/home/backup"
     
    # Main directory where backup will be stored
    MBD="$DEST/mysql"
     
    # Get hostname
    HOST="$(hostname)"
     
    # Get data in dd-mm-yyyy format
    NOW="$(date +%d-%m-%Y)"
    OLD="$(date -d last-month +%d-%m-%Y)"
     
    # File to store current backup file
    FILE=""
    # Store list of databases
    DBS=""
     
    # DO NOT BACKUP these databases
    IGGY="test"
     
    rm -rf $MBD
     
    [ ! -d $MBD ] mkdir -p $MBD || :
     
    # Only root can access it!
    $CHOWN 0.0 -R $DEST
    $CHMOD 0600 $DEST
     
    # Get all database list first
    DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
     
    cat > ftpcc.sh EOF
    cd $MBD
    ftp -i -n!
    open blog.renhao.org #在这里填写FTP服务器的域名或IP
    user ftp_user ftp_pass #在这里填写FTP用户名和密码,注意空格分隔
    binary
    mput *.gz
    EOF
     
    for db in $DBS
    do
        skipdb=-1
        if [ "$IGGY" != "" ];
        then
            for i in $IGGY
            do
                [ "$db" = "$i" ] skipdb=1 || :
            done
        fi
     
        if [ "$skipdb" = "-1" ] ; then
            FILE="$MBD/$db.$HOST.$NOW.gz"
            echo "delete $db.$HOST.$OLD.gz" >> ftpcc.sh
            # do all inone job in pipe,
            # connect to mysql using mysqldump for select mysql database
            # and pipe it out to gz file in backup dir :)
            $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
        fi
    done
     
    cat >> ftpcc.sh EOF
    close
    bye
    !
    EOF
     
    sh ftpcc.sh
    rm ftpcc.sh

    这样的Shell脚本运行后,可以得到每个MySQL库的独立备份文件,且以gz格式压缩以便节省空间。

    您可能感兴趣的文章:
    • Mysql数据库清理binlog日志命令详解
    • mysql数据库如何实现亿级数据快速清理
    • 用批处理实现自动备份和清理mysql数据库的代码
    • 清理Mysql general_log的方法总结
    • 阿里云mysql空间清理的方法
    • 如何彻底删除mysql服务(清理注册表)详解
    • mysql 正确清理binlog日志的两种方法
    • MySQL 自动清理binlog日志的方法
    • 解析mysql 表中的碎片产生原因以及清理
    • php数据入库前清理 注意php intval与mysql的int取值范围不同
    • MySQL 线上数据库清理数据的方法
    上一篇:shell脚本监控系统负载、CPU和内存使用情况
    下一篇:实时查看系统流量的Shell脚本分享
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Shell脚本自动备份MySQL到FTP并定期清理过期备份 Shell,脚本,自动,备份,MySQL,