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表示星期日)