Mysql備份策略大概可分爲4種:
1) 直接拷貝數據庫文件(不推薦)mysql
2) 使用mysqlhotcopy備份數據庫sql
3) 使用mysqldump備份數據庫shell
4) 使用主從複製機制(replication)(實現數據庫實時備份)數據庫
通常mysqldump使用比較普遍,操做也方便,下面就具體描述mysqldump備份策略。bash
數據備份分爲三步:
1) 定時導出備份數據庫並打包成gz壓縮包 (Linux shell 腳本 + crontab)服務器
mysqlFullBackup.shui
#
!/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)this
或從服務器上備份數據庫到ftp 服務器 (Linux shell 腳本 + crontab)spa
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表示星期日)