0

以下是在 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 脚本的帮助下,我想存储 laste 10 数据库备份请建议 bash 脚本命令来做同样的事情..

最好的问候阿文德

4

3 回答 3

1

像这样的东西应该工作:

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 个最近的备份。

于 2012-08-31T12:33:56.040 回答
0

jOnes 的解决方案是合理的。这是另一种选择:不理会脚本,并使用“ logrotate ”来处理修剪。在你的/etc/logrotate.conf,你会放这样的东西:

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

查看man logrotate以确认哪些选项最适合您。

于 2012-08-31T12:42:47.670 回答
0

也许我有点晚了,因为这个问题已经 3 岁了,但我想我可以为 jOnes 脚本添加更多功能。我需要一个类似的脚本,但由于它可以一天运行多次,“旋转”部分对我来说效果不佳。

此外,我认为 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
于 2016-04-19T10:58:56.223 回答