当前位置: 首页 > 编程笔记 >

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

督俊雅
2023-03-14
本文向大家介绍Shell脚本自动备份MySQL到FTP并定期清理过期备份,包括了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)"

 

# html" target="_blank">数据库备份的路径

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格式压缩以便节省空间。

 类似资料:
  • 问题内容: 我想使用<在这里插入最喜欢的PHP框架> / plain php /我的第二喜欢的语言对mysql数据库中的某些表进行定期备份。我希望它是自动化的,以便以后出现问题时可以还原备份。 我尝试执行查询并将结果保存到文件中。最终得到看起来像这样的代码。 我在本地计算机上设置了cron作业,以使用此代码访问网页。我还尝试在服务器上编写cronjob,以CLI身份运行脚本。但这引起了各种各样的问

  • 本文向大家介绍linux下mysql如何自动备份shell脚本,包括了linux下mysql如何自动备份shell脚本的使用技巧和注意事项,需要的朋友参考一下 Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本,结合 crontab,定时备份数据库。其实非常简单,主要就是使用 MySQL 自带的 mysqldump 命令。 保存后将以上脚本加入cront

  • 本文向大家介绍Oracle自动备份脚本,包括了Oracle自动备份脚本的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 接下来给大家介绍linux oracle自动备份脚本 1、备份脚本: 2、添加到任务调度 crontab -u oracle -e * 3 * * * /home/bakup/bakup.sh 即每天凌晨3点进行备份 如需每天备份多次

  • 本文向大家介绍CentOS下mysql定时备份Shell脚本分享,包括了CentOS下mysql定时备份Shell脚本分享的使用技巧和注意事项,需要的朋友参考一下 1、备份语句   语句说明:   /usr/local/mysql/bin/mysqldump:MySql安装目录下 -utest:分为两块,一块为-u一块为test;其中-u表示其为用户名,test表示为当前用户名 -ptest:分为

  • 本文向大家介绍简单的远程FTP定时备份Shell脚本分享,包括了简单的远程FTP定时备份Shell脚本分享的使用技巧和注意事项,需要的朋友参考一下 先说问题.公司现在有2台服务器,都是centos系统,一台本地(局域网),一台则在电信机房.因为工作需要,每天备份机房上的数据到本地,以前一直是FTP登录,然后下载到本地机器.现在则希望,利用本地的centos机器,自动备份到本地. 解决方法如下: 1

  • 本文向大家介绍一个简单的MySQL备份Shell脚本,包括了一个简单的MySQL备份Shell脚本的使用技巧和注意事项,需要的朋友参考一下 说明:此脚本每七天做一次完全备份,以后每天做一次增量备份,完全备份使用mysqldump客户端工具,增量备份使用mysqlbinlog备份其二进制日志文件。