工作中可能碰到的資料庫自動備份需求。
技術也不太複雜,主要就是mysqldump和crontab,不過還是結合網上的資料以及自己的理解自己整理一篇,供後來者參考。不知道發在這裡合適不?
Linux下自動實現Mysql資料庫的異地備份方案
項目需求:為防止公司網站重要的數據丟失,必須實現伺服器Mysql資料庫的備份。根據本公司情況,從技術手段上實現異地日備份來提高安全性。
伺服器環境:Linux Enterprise Server 2.6.9-42.Elsmp,Mysql 5.1.11-beta-log
配置步驟:
A:資料庫的備份;以下腳本可實現mysql資料庫的備份,也是官方所推薦的,即採用mysqldump導出mysql資料庫到一個文件當中。
/usr/local/mysql/bin/mysqldump -uroot –p123456789 a1m > $(date +%Y%m%d)-a1m.sql
/usr/local/mysql/bin/mysqldump -uroot –p123456789 Asia1Market > $(date +%Y%m%d)-Asia1Market.sql
說明:/usr/local/mysql/bin/mysqldump 表示Mysql備份命令所在的絕對路徑;-uroot表示用root用戶登陸Mysql資料庫;-p123456789 表示root用戶的密碼;a1m表示需要備份的資料庫;$(date +%Y%m%d)-a1m.sql表示備份后自動生成的文件,格式為20070305-a1m.sql以下如此。
B:資料庫文件的打包壓縮;這樣可以見減小數據包的大小加速數據在網路上傳輸的速度。
tar -zcvf $(date +%Y%m%d)mysql.tar.gz ./$(date +%Y%m%d)*
C:實現FTP的自動化;
Host=111.11.11.11 //指定上傳資料庫文件的FTP伺服器
Username=e00021 //FTP用戶名,在備份伺服器上開通一帳戶具有寫的許可權
Passwd=123456789 //FTP 密碼
echo "open $Host
user $Username $Passwd
bin
cd ./mysqlbak
prompt off
mput $(date +%Y%m%d)mysql.tar.gz
printf "\n"
close
bye"|ftp -i –n
D:刪除臨時文件;為了節省伺服器上寶貴的空間,可以用以下腳本刪除曾經在伺服器上生成的臨時文件
rm -rf $(date +%Y%m%d)-a1m.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)mysql.tar.gz
通過把以上幾種技術結合起來就可實現資料庫的自動備份以及上傳到指定FTP伺服器上去,實現數據的異地備份,從而提高數據的冗餘度和安全行。然後結合Linux下強大的自動執行任務程序crontab就可以實現每天伺服器自動的進行以上命令而不需要人為的干涉。
E:自動化crontab的使用
首先結合以上腳本定製出適合本公司的一段shell腳本放在伺服器根目錄下/mysqlbak,命名為mysqlbak.sh,並且賦予可執行的許可權。腳本內容如下:
-------------------------------------------------------------------------------------------------------
#!/bin/bash
#Ftp Informaition
Host=111.11.11.11
Username=backup
Passwd=123456789
#start mysqldump back
/usr/local/mysql/bin/mysqldump -uroot –p123456789 a1m > $(date +%Y%m%d)-a1m.sql
/usr/local/mysql/bin/mysqldump -uroot –p123456789 Asia1Market > $(date +%Y%m%d)-Asia1Market.sql
#start tar
tar -zcvf $(date +%Y%m%d)mysql.tar.gz ./$(date +%Y%m%d)*
#start ftp
echo "open $Host
user $Username $Passwd
bin
cd ./mysqlbak
prompt off
mput $(date +%Y%m%d)mysql.tar.gz
printf "\n"
close
bye"|ftp -i -n
#del the old file
rm -rf $(date +%Y%m%d)-a1m.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)mysql.tar.gz
#rm -rf $(date +%Y%m%d)*
然後就可以結合crontab命令實現日備份。具體操作如下:
用root登陸系統編輯crontab文件末尾添加如下一行,即每天的23:20執行以上腳本
#crontab –e
20 23 * * 0-6 root cd /mysqlbak;./mysqlbak.sh
這樣,伺服器就可以自動的每天實現重要數據的異地備份。
[火星人 ] Mysql資料庫異地自動備份方案已經有847次圍觀