MySQL數據庫定時備份Shell腳本並備份至其它機器方法
這是一個簡單的MySQL數據庫備份shell腳本,適用於單台Linux服務器或者VPS的mysql數據庫備份工作,
工作原理是使用mysql的mysqldump工具來導出數據庫為.sql文件,然後將所有導出的文件打包歸檔。
然後我們在shell腳本中使用 scp命令把備份文件復制到另外一台備份機器,由於scp每次傳送文件要密碼
因此我們需要使用 expect插件或者利用密鑰。在這裡介紹采用生成密鑰對的方法。
1,生成密匙對,我用的是rsa的密鑰。使用命令 "ssh-keygen -t rsa"
生成的過程中提示輸入密鑰對保存位置及密碼,直接回車,接受默認值就行了。
其中公共密鑰保存在 ~/.ssh/id_rsa.pub,私有密鑰保存在 ~/.ssh/id_rsa 。
2,然後修改 .ssh 目錄權限,chmod 755 ~/.ssh 。最後把 公共密鑰復制到你要訪問
的機器上去,並保存為:~/.ssh/authorized_keys 。
scp -P 1110 ~/.ssh/id_rsa.pub daniel@*.*.*.*:/home/daniel/.ssh/authorized_keys
(注意這裡- P 為大寫, 表示目標機器daniel 的ssh端口為1110,小寫的p為源ssh端口
修改ssh端口在文件/etc/ssh/sshd_config下 。)這裡完成scp 腳本免密鑰的方法介紹。
最後使用crontab定時執行腳本即可!
腳本如下:
[plain]
#!/bin/bash
# description: MySQL buckup shell script
# author: Daniel
st=$(date +%s)
USER="root"
PASSWORD="*****"#用戶名
DATABASE="myblogdb" #數據庫用戶密碼
MAIL="[email protected]"#mail
BACKUP_DIR=/home/daniel/data_backup/ #備份文件存儲路徑
LOGFILE=/home/daniel/data_backup/data_backup.log #日志文件路徑
DATE=`date +%Y%m%d-%H%M`#用日期格式作為文件名
DUMPFILE=$DATE.sql
ARCHIVE=$DATE.sql.tar.gz
OPTIONS="-u$USER -p$PASSWORD $DATABASE"
#判斷備份文件存儲目錄是否存在,否則創建該目錄
if [ ! -d $BACKUP_DIR ]
then
mkdir -p "$BACKUP_DIR"
fi
#開始備份之前,將備份信息頭寫入日記文件
echo " ">> $LOGFILE
echo "--------------------" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "-------------------" >> $LOGFILE
#切換至備份目錄
cd $BACKUP_DIR
mysqldump $OPTIONS > $DUMPFILE
#判斷數據庫備份是否成功
if [[ $? == 0 ]]
then
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
rm -f $DUMPFILE #刪除原始備份文件,只需保留備份壓縮包
# 把壓縮包文件備份到其他機器上。
scp -P $ARCHIVE daniel@*.*.*.*:/home/daniel/data_backup/
else
echo "Database Backup Fail!" >> $LOGFILE
#備份失敗後向管理者發送郵件提醒
mail -s "database:$DATABASE Daily Backup Fail!" $MAIL
fi
echo "Backup Process Done"
#刪除3天以上的備份文件
#Cleaning
find $BACKUP_DIR -type f -mtime +2 -name "*.tar.gz" -exec rm -f {} \;
修改/etc/crontab
#vi /etc/crontab
在下面添加:
00 03 * * * root /data/backup/dump.sh
注意/data/backup/dump.sh為腳本的存放位置.
表示每天3點鐘執行備份。
重新啟動crond
# /etc/rc.d/init.d/crond restart