使用bash脚本进行过去10天的MySQL备份

使用bash脚本进行过去10天的MySQL备份,bash,Bash,下面是在linux服务器上的MYSql数据库上调度的脚本。 下面是使用bash脚本的代码 #!/bin/bash # MySQL backup script # Last update: 20090504 # MHOST=localhost MUSER=backup MPASS=OwBPimRc BACKUPDIR="/mnt/backup" ######################################################################## M

下面是在linux服务器上的MYSql数据库上调度的脚本。 下面是使用bash脚本的代码

#!/bin/bash
# MySQL backup script
# Last update: 20090504
#

MHOST=localhost
MUSER=backup
MPASS=OwBPimRc
BACKUPDIR="/mnt/backup"

########################################################################

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

DBPREFIX="$(hostname -s).mysqldb"

echo "Run MySQL backup"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
  FILE=${BACKUPDIR}/${DBPREFIX}.${db}.gz
  $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 
但我想定制这个过程,就像 1.在上述bash脚本的帮助下,我想备份laste10数据库 请建议bash脚本命令执行同样的操作

致意
Arvind

像这样的东西应该有用:

MHOST=localhost
MUSER=backup
MPASS=OwBPimRc
BACKUPDIR="/mnt/backup"

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

DBPREFIX="$(hostname -s).mysqldb"

echo "Run MySQL backup"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
    FILE=${BACKUPDIR}/${DBPREFIX}.${db}.`date +%Y%m%d`.gz
    $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

find  -name "${BACKUPDIR}/${DBPREFIX}*" -type f -mtime +10 -exec rm -f '{}' ';'

基本思想是使用文件名中的日期为每天获取不同的数据库备份。在最后一行中,您可以删除所有超过10天的文件,只保留10个最新备份完好无损。

jOnes的解决方案是合理的。这里还有另一种选择:不要使用脚本,使用“”来处理修剪。在您的
/etc/logrotate.conf
中,您可以放置如下内容:

   /mnt/backup/*.mysqldb {
       daily
       rotate 10
       missingok
       nocompress
   }

请参见
man logrotate
,以确认哪些选项最适合您

可能我有点晚了,因为问题已经问了3年了,但我想我可以在琼斯脚本中添加多一点功能。 我需要一个类似的脚本,但由于它可以一天运行多次,“旋转”部分对我来说不太合适

此外,我认为OP需要一种方法,只保留每个数据库的最后“n”个备份,而jOnes版本保留最后“n”个备份文件(因此,如果服务器中有11个数据库,则只保留前10个)

以下是我的版本:

MHOST=localhost
MUSER=backup
MPASS=OwBPimRc
BACKUPDIR="/mnt/backup"
MAXBACKUPS=10

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

DBPREFIX="$(hostname -s).mysqldb"

echo "Run MySQL backup"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
    FILE=${BACKUPDIR}/${DBPREFIX}.${db}.`date +%Y%m%d%H%M%S`.gz
    $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE

    TOTBACKUPS=$[`ls -l ${BACKUPDIR}/${DBPREFIX}.${db}* | wc -l` - 1]
    if [ $TOTBACKUPS > $MAXBACKUPS ]
    then
        TBREMOVED=$[TOTBACKUPS - MAXBACKUPS + 1]
        REMLIST=`ls -ctr ${BACKUPDIR}/${DBPREFIX}.${db}*  | head -n ${TBREMOVED}`
        for i in $REMLIST
        do
            rm -rf $i
        done
    fi    

done

这是一个纯bashshell脚本;不是Perl。很抱歉搞混了。是的,这是shell脚本。已安排perl脚本检查数据库备份是否正确完成。你能把这篇文章移到相应的组下看一下吗?注意在命令中输入你的密码。机器上的其他用户将能够在进程列表中读取它。使用类似于
$(cat密码文件)
的内容,如下所述:您好,谢谢回复。但在这里我可以看到备份是用各自的日期创建的,我可以创建新文件夹并在该文件夹中存储最后10个备份吗?我怎么能做到。我的意思是,在文件夹/mnt/backup中,我们有10个文件夹可以存储最后10个数据库文件?为此,我如何修改上述代码?