天天看點

MYSQL資料庫自動本地/異地雙備份/MYSQL增量備份[連載之建構百萬通路量電子商務網站]

MYSQL資料庫自動本地/異地雙備份/MYSQL增量備份[連載之建構百萬通路量電子商務網站]

作者:Jimmy Li

關鍵詞:網站,電子商務,Shell,自動備份,異地備份

------[連載之電子商務系統架構]通路量超過100萬的電子商務網站技術架構

建構高安全電子商務網站之(網站檔案及資料庫自動本地/異地雙備份)架構圖

   繼續介紹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資料庫增量備份。今天分享一個自己的備份腳本。

一、準備工作:

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

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

腳本二:

MYSQL資料庫增量備份Shell腳本

如果資料庫資料量比較大,可以一天全備一次, 再每隔一小時增量備份一次;

建立增量備份目錄

增量備份的檔案放在/backup/mysql/daily目錄下。

增量備份的資料量比較小,但是要在完整備份的基礎上操作。

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

Shell

#!/bin/sh

# mysql data backup script

# use mysqldump --help,get more detail.

#Author: Jimmy Li

#Website: http://jimmyli.blog.51cto.com/

# 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

base=`basename $file`

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $COUNTER ]

then

echo "skip lastest"

else

dest=$BAKDIR/$base

if(test -e $dest)

echo "skip exist $base"

echo "copying $base"

cp $base $BAKDIR

fi

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進行備份,是因為這個時間段網站的通路量是最低。也就是說在很少人通路的情況下做備份操作。

MYsql Binlog

/etc/my.cnf中的mysqld部分加入:

[mysqld]

log-bin=../logs/mysql-bin

max-binlog-size=512M

windows下開啟binlog

%mysql%/my.ini中的mysqld部分加入:

log-bin =../logs/mysql-bin

腳本一:

網站及資料庫自動本地備份并FTP上傳備份Shell腳本,完整的執行個體:

========================================================================

#!/bin/bash

#Funciont: Backup website and mysql database

#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

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

<a target="_blank" href="http://img1.51cto.com/attachment/201106/143312728.gif"></a>

定期檢查異地備份故障應急時,啟用應急Web服務

     本文轉自jimmy_lixw 51CTO部落格,原文連結:http://blog.51cto.com/jimmyli/888630,如需轉載請自行聯系原作者