以下是脚本是在Linux服务器上的MYSql DataBase上安排的。 以下是使用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脚本的帮助下,我希望存储最新的10个数据库备份 请建议bash脚本命令执行相同的操作..
最诚挚的问候 Arvind的
答案 0 :(得分: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个最新的备份。
答案 1 :(得分:0)
来自jOnes的解决方案是合理的。这是另一种选择:单独保留脚本,并使用“logrotate”来处理修剪。在您的/etc/logrotate.conf
中,您可以使用以下内容:
/mnt/backup/*.mysqldb {
daily
rotate 10
missingok
nocompress
}
请参阅man logrotate
以确认哪种选项最适合您。
答案 2 :(得分: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