功能:備份mysql資料庫中mail的資料庫數據,並用gz壓縮,先備份到本地,然後自動上傳到指定的ftp伺服器,備份日誌email到指定的郵箱
借鑒了網上查找的一些範例,現在記不起來是什麼地方,在此謝謝
# cat mailmysql_backup_ftp
#!/bin/bash
#Mysql Autobackup Shell
#Writed by ruochen0926@hotmail.com QQ:967409
#DB env
dbuser=root
dbpasswd=root
dbserver=localhost
dbname=extmail
#dbopt=--opt
backupdir=/home/mysql-backup/
#FTP 0 is disable,1 is enable
copytoftp=1
ftpserver=10.1.1.8
ftpuser=admin
ftppasswd=admin
fileprefix=extmail
dumpfilename=$backupdir`date +%F`.sql
newfile=$fileprefix-`date +%F`.gz
keepdays=16
#Backup log
logfile=/tmp/mysqldump.log
logtmp=/tmp/mysqldump.tmp
#mail 0 is diable,1 is enable
mailenable=1
mailaddress=ruochen0926@hotmail.com
#Backup script
#===============================================
if [ ! -d $backupdir ]
then
echo "$backupdir is not exist, then make ..." > $logfile
mkdir -p $backupdir
fi
echo "start====================================>">$logfile
echo "Beginning backup `date '+%F %T'`" >>$logfile
echo "Delete $keepdays days ago files ..." >>$logfile
find $backupdir -name $fileprefix* -mtime +$keepdays -fls $logtmp -exec rm {} \;
echo "Deleted Backup File Is :">>$logfile
cat $logtmp >>$logfile
echo "Delete old file Success!" >>$logfile
if [ -f $backupdir$newfile ]
then
echo "$newfile backup exist, backup stop ..." >>$logfile
else
if [ -z $dbpasswd ]
then
# mysqldump -u$dbuser -h$dbserver $dbopt $dbname >$dumpfilename
/usr/bin/mysqldump -u$dbuser -h$dbserver $dbopt $dbname >$dumpfilename
else
# /opt/lampp/bin/mysqldump -u$dbuser -p$dbpasswd -h$dbserver $dbopt $dbname | gzip > /opt/apache/mysqlbackup/$newfile
/usr/bin/mysqldump -u$dbuser -p$dbpasswd -h$dbserver $dbopt $dbname | gzip > $backupdir/$newfile
fi
# tar czvf $backupdir$newfile $dumpfilename >>$logfile 2>&1
# gzip $dumpfilename $newfile >>$logfile 2>&1
echo "$backupdir$newfile Backup Success!" >>$logfile
rm -fr $dumpfilename
if [ $copytoftp = 1 ]; then
if [ -z $ftpserver ];then
echo "Ftp Server not set,Copy to Ftp Failed ..." >>$logfile
exit 1
elif [ -z $ftpuser ];then
echo "Ftp user not set, Copy to Ftp Failed ..." >>$logfile
exit 2
elif [ -z $ftppasswd ]; then
echo "Ftp password not set, Copy to Ftp Failed ..." >>$logfile
exit 3
else
echo "Start copy to Ftp server ...." >> $logfile
ftp -n<<eof
open $ftpserver
user $ftpuser $ftppasswd
bin
cd mail_backup
cd mailmysql
lcd $backupdir
mput $newfile
y
bye
eof
fi
fi
echo "$newfile Upload Ftp Successful">>$logfile
echo "End=======================================|">>$logfile
fi
if [ $mailenable=1 ];
then
mail -s "Mail Server Mysql Backup Status" $mailaddress<$logfile
fi
[ 本帖最後由 ruochen 於 2008-11-22 10:32 編輯 ]
《解決方案》
支持一下
提個小小建議。 你把logfile放在tmp目錄下,比較容易丟失,可能會被誤刪掉,是否可以放在某個特定的目錄下,比較容易找,也使系統目錄更整齊
提個小小建議。 你把logfile放在tmp目錄下,比較容易丟失,可能會被誤刪掉,是否可以放在某個特定的目錄下,比較容易找,也使系統目錄更整齊
你肯定沒有看完我的腳本
我是臨時存放的
每次腳本執行完后就將log mail到我的郵箱了
下次我的log文件又是新生成的,按上面的循環,我根本不需要在伺服器上保存我的logfile
《解決方案》
怎麼沒有加--OPT參數?請說明一下,謝謝!
《解決方案》
下面是man裡面對opt參數的解釋
· --opt
This option is shorthand; it is the same as specifying
--add-drop-table --add-locks --create-options --disable-keys
--extended-insert --lock-tables --quick --set-charset. It should
give you a fast dump operation and produce a dump file that can be
reloaded into a MySQL server quickly.
The --opt option is enabled by default. Use --skip-opt to disable
it. See the discussion at the beginning of this section for
information about selectively enabling or disabling certain of the
options affected by --opt.
[火星人 ] 分享mail伺服器的mysql資料庫備份腳本已經有713次圍觀