MySQL資料庫數據庫定時備份Shell腳本並備份至其它機器方法

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="abcd@gmail.com"#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

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。