使用bash脚本进行过去10天的MySQL备份
下面是在linux服务器上的MYSql数据库上调度的脚本。 下面是使用bash脚本的代码使用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
#!/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个数据库文件?为此,我如何修改上述代码?