MYSQL數據庫自動本地/異地雙備份/MYSQL增量備份


構建高安全電子商務網站之(網站文件及數據庫自動本地/異地雙備份)架構圖

  繼續介紹Linux服務器文件備份,數據庫備份,數據安全存儲相關的電子商務系統架構。針對安全性有多種多樣的解決方案,其中數據備份是重中之重的首要工作。
電 子商務網站更加注重考慮數據安全,數據備份方案,包括本地備份、異地備份架構。其中Linux服務器的備份方案非常多,本文介紹一個大眾化適用的解決方 案,通過編寫Shell腳本來完成自動備份。本架構包括備份網站文件、數據庫,自動本地備份並FTP上傳備份腳本,完成相應本地備份、異地備份,實現雙層 備份解決方案。

本文要點:

1.MYSQL數據庫自動本地/異地雙備份/MYSQL數據庫增量備份。
2.編寫Shell腳本來完成自動MYSQL備份、MYSQL數據庫增量備份。
3.同時進行自動本地/異地雙備份,FTP上傳備份。
4.Linux服務器的備份解決方案。
5.Shell腳本包括備份網站文件,網站程序文件、數據文件,MYSQL數據庫。
6.定期定時自動完成備份。定期刪除舊備份,這里是自動刪除30天前備份,復用利用備份空間。

目錄:

一、准備工作
二、網站運維異地備份方案及故障應急備用鏡像站架構圖
三、網站MYSQL數據庫自動本地/異地雙備份/MYSQL數據庫增量備份Shell腳本,完整的實例;備份腳本進行詳細解說,注釋。

在 運營中的電子商務網站,建站之初就一直在重申一定要備份好自己的數據,因為太多的不確定性可能會造成數據庫丟失,而且大部分基礎服務商也不可能提供每天備 份數據。原來本BLOG提供過一個備份方法,介紹了Shell腳本MYSQL數據庫自動備份,沒有介紹MYSQL數據庫增量備份。今天分享一個自己的備份 腳本。
參考之前的文章 http://jimmyli.blog.51cto.com/3190309/691069 《構建高安全電子商務網站之(網站文件及數據庫自動本地/異地雙備份)[連載之電子商務系統架構]》

一、准備工作:

Linux服務器安裝好lftp,另外需要提前在Linux服務器上創建/home/backup/ 備份目錄建立。並且保證FTP能正常使用賬戶密碼登陸上次文件。既是保證FTP服務正常提供服務。


二、網站運維異地備份方案及故障應急備用鏡像站架構圖


三、網站MYSQL數據庫自動本地/異地雙備份/MYSQL數據庫增量備份Shell腳本

腳本二:
MYSQL數據庫增量備份Shell腳本

如果數據庫數據量比較大,可以一天全備一次, 再每隔一小時增量備份一次;
建立增量備份目錄
增量備份的文件放在/backup/mysql/daily目錄下。
增量備份的數據量比較小,但是要在完整備份的基礎上操作。

增量備份使用bin log,腳本如下:

雙擊代碼全選
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/sh  
# mysql data backup script  
# use mysqldump --help,get more detail.  
#Author: Jimmy Li  
# mysql binlog backup script  
         
/usr/bin/mysqladmin flush-logs  
         
DATADIR=/var/lib/mysql  
BAKDIR=/backup/mysql/daily  
         
###如果mysql bin log你做了特殊設置,請修改此處或者修改應用此變量的行:缺省取機器名,mysql缺省也是取機器名  
HOSTNAME=`uname -n`  
cd $DATADIR  
FILELIST=`cat $HOSTNAME-bin. index `  
         
## COUNTER number  
COUNTER=0  
for file in $FILELIST  
do  
COUNTER=`expr $COUNTER + 1 `  
done  
         
NextNum=0  
for file in  $FILELIST  
do  
base=`basename $file`  
NextNum=`expr $NextNum + 1`  
if [ $NextNum -eq $COUNTER ]  
then
echo "skip lastest"
else
dest=$BAKDIR/$base  
if(test -e $dest)  
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR  
fi  
fi  
done  
         
echo "backup mysql binlog ok"

腳本解析說明:
增量備份腳本是備份前flush-logs,mysql會自動把內存中的日志放到文件里,然后生成一個新的日志文件,所以我們只需要備份前面的幾個即可,也就是不備份最后一個.
因為從上次備份到本次備份也可能會有多個日志文件生成,所以要檢測文件,如果已經備份過,就不用備份了.

溫馨提示、增量備份:
每天中午03點和晚上03點做一次全備,每隔一小時備份binlog,也就是增量備份,具體操作如下:

Linux下開啟binlog

將腳本放到/root/ 下面,按上面的注釋修改腳本中的參數,使用vim編輯器並保存。
執行:chmod +x /root/backup.sh 為腳本添加執行權限。
執行:crontab -e 添加定時執行。
在crontab中加入:0 3 * * * /root/backup.sh
凌晨3點自動執行/root/bakcup.sh 腳本,備份Linux服務器上的數據並上傳到預先設定好的異地FTP上。
選擇在凌晨3進行備份,是因為這個時間段網站的訪問量是最低。也就是說在很少人訪問的情況下做備份操作。

雙擊代碼全選
1
2
3
4
5
6
7
8
9
10
/etc/my.cnf中的mysqld部分加入:  
[mysqld]  
log-bin=../logs/mysql-bin  
max -binlog- size =512M  
         
windows下開啟binlog  
%mysql%/my.ini中的mysqld部分加入:  
[mysqld]  
log-bin =../logs/mysql-bin  
max -binlog- size =512M

腳本一:
網站及數據庫自動本地備份並FTP上傳備份Shell腳本,完整的實例:

雙擊代碼全選
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash  
#Funciont: Backup website and mysql database
#Author: Jimmy Li  
#IMPORTANT!!!Please Setting the following Values !  
Backup_Dir1=/data/wwwroot/jimmyli.jimmyli.jimmyli.blog.51cto.com  
MYSQL_UserName=root  
MYSQL_PassWord=你的mysql數據庫root密碼  
Backup_Database_Name1=jimmyli.jimmyli.jimmyli.blog.51cto.com  
FTP_HostName=jimmyli.jimmyli.jimmyli.blog.51cto.com  
FTP_UserName=jimmyli.jimmyli.jimmyli.blog.51cto.com  
FTP_PassWord=jimmyli.jimmyli.jimmyli.blog.51cto.com  
FTP_BackupDir=jimmyli.jimmyli.jimmyli.blog.51cto.com  
TodayWWWBackup=www-*-$( date + "%Y%m%d" ).tar.gz  
TodayDBBackup=db-*-$( date + "%Y%m%d" ).sql  
OldWWWBackup=www-*-$( date -d -30day + "%Y%m%d" ).tar.gz  
OldDBBackup=db-*-$( date -d -30day + "%Y%m%d" ).sql  
tar zcf /home/backup/www-$Backup_Dir1-$( date + "%Y%m%d" ).tar.gz -C /home/wwwroot/ $Backup_Dir1 --exclude=soft  
/usr/ local /mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 > /home/backup/db-$Backup_Database_Name1-$( date + "%Y%m%d" ).sql  
rm $OldWWWBackup  
rm $OldDBBackup  
cd /home/backup/  
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF  
cd $FTP_BackupDir  
mrm $OldWWWBackup  
mrm $OldDBBackup  
mput $TodayWWWBackup  
mput $TodayDBBackup  
bye  
EOF

備份腳本進行詳細解說,注釋參考 http://jimmyli.blog.51cto.com/3190309/691069 《構建高安全電子商務網站之(網站文件及數據庫自動本地/異地雙備份)[連載之電子商務系統架構]》
========================================================================

網站運維異地備份方案及故障應急備用鏡像站

定期檢查異地備份故障應急時,啟用應急Web服務
連接:http://jimmyli.blog.51cto.com/3190309/584992 網站運維異地備份方案及故障應急備用鏡像站

本文出自 “Jimmy Li我站在巨人肩膀上” 博客,請務必保留此出處http://jimmyli.blog.51cto.com/3190309/888630


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM