服務器數據備份(shell 定時腳本備份mysql)

Mysql備份策略大概可分爲4種:

1) 直接拷貝數據庫文件(不推薦)

2) 使用mysqlhotcopy備份數據庫

3) 使用mysqldump備份數據庫

4) 使用主從複製機制(replication)(實現數據庫實時備份)

一般mysqldump使用比較廣泛,操作也方便,下面就具體描述mysqldump備份策略。

數據備份分爲三步:

1) 定時導出備份數據庫並打包成gz壓縮包 (Linux shell 腳本 + crontab)

mysqlFullBackup.sh

#!/bin/sh

# Use mysqldump --help get more detail.

#
# 定義變量,請根據具體情況修改
# 定義腳本目錄
scriptsDir=`pwd`

# 定義用於備份數據庫的用戶名和密碼
user=root
userPWD=123456

# 定義備份數據庫名稱
dbNames=(database1 database2 database3)

# 定義備份目錄
dataBackupDir=/home/zhanghuihua/backup

# 定義郵件正文文件
eMailFile=$dataBackupDir/log/email.txt

# 定義郵件地址
eMail=Huihua.Zhang@quidos.co.uk

# 定義備份日誌文件
logFile=$dataBackupDir/log/mysqlbackup.log

# DATE=`date -I`
DATE=`date -d "now" +%Y%m%d`

echo `date -d "now" "+%Y-%m-%d %H:%M:%S"` > $eMailFile

for dbName in ${dbNames[*]}
do
    # 定義備份文件名
    dumpFile=$dataBackupDir/db/$dbName-$DATE.sql.gz

    # 使用mysqldump備份數據庫,請根據具體情況設置參數
    mysqldump -u$user -p$userPWD $dbName | gzip > $dumpFile
done

if [[ $? == 0 ]]; then
    echo "DataBase Backup Success!" >> $eMailFile
else
    echo "DataBase Backup Fail!" >> $emailFile
fi

# 寫日誌文件
echo "================================" >> $logFile
cat $eMailFile >> $logFile
echo $dumpFile >> $logFile

# 發送郵件通知
#cat $eMailFile | mail -s "MySQL Backup" $eMail

2) 通過ftp 服務定時下載到本地 (Linux shell 腳本 + crontab)

或從服務器上備份數據庫到ftp 服務器 (Linux shell 腳本 + crontab)

ftpDownload.sh

#!/bin/bash
# 定義變量
DATE=`date -d "now" +%m%d%y`

ftpServer=192.168.1.103
ftpUser=zhanghuihua
ftpPasswd=123456

remoteDir=/backup/db
localDir=/home/zhanghuihua/backup

#開始ftp操作
/usr/bin/ftp -niv <<!
open $ftpServer
user $ftpUser $ftpPasswd
binary
cd $remoteDir
lcd $localDir

mget database1-$DATE.sql.gz
mget database2-$DATE.sql.gz
mget database3-$DATE.sql.gz
bye
!

dbPutToFtp.sh

#!/bin/bash
# 定義變量
DATE=`date -d "now" +%Y%m%d`

ftpServer=192.168.1.103
ftpUser=zhanghuihua
ftpPasswd=123456

remoteDir=/backup/db
localDir=/home/zhanghuihua/backup/db

#開始ftp操作
/usr/bin/ftp -niv <<!
open $ftpServer
user $ftpUser $ftpPasswd
binary
cd $remoteDir
lcd $localDir

mput database1-$DATE.sql.gz
mput database2-$DATE.sql.gz
mput database3-$DATE.sql.gz

bye
!

3) 定期刻錄光盤 (人工操作)

3) 定期刻錄光盤 (人工操作)

Crontab 定時任務管理

crontab -e

01 03 * * * /var/proftpd_data/backup/bin/mysqlFullBackup.sh

10 04 * * * /var/proftpd_data/backup/bin/ftpDownload.sh

前五個字段的整數取值範圍及意義是:

0~59 表示分

1~23 表示小時

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

來源:http://www.cnblogs.com/dwzjs/archive/2011/04/25/2027687.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章