Gmail 額外用途 2.
轉載自: 備份BLOG資料庫到GMAIL
雖然Server的重要資料我都有排桯每個月自動備份,而像BLOG的資料庫更是每天自動備份,備份的壓縮檔全部都是儲存至另一顆HD(linux mount another HD) ,以降低風險。
前幾天和阿Sam討論要把Server的Blog資料庫給作遠端備份。
必竟Plog是以MySQL為資料庫,將它dump出來再壓縮資料是很小的。
而我們認為GMAL的1GB帳號空間實在很好用,把Blog的資料庫備份一份到那裡去,實在是佳選!
於是我就著手在我的Linux server上寫個簡單的Script,再丟到每日自動執行的排程去就好了。
似乎聽起來是很簡單沒有錯,可是偏偏越容易事就常常碰到一些意外發生。
要以Script來送信到某個信箱是沒什麼問題,可惜的是只單單靠系統的mail指令是做不attach file的。
於是對於夾檔的問題我大約先後請教了古狗大神(Google)十幾次,又借助了幾位Linux前輩的幫助,再摸索個一番,終於把它搞定了。
首先我們需要工具,一個可以把檔案編碼成mail看得懂的型能才行。
常見的編碼模式有:UUencode,MIME二種。
查了一下,大部份寫在linux 上寫Script送信夾檔會用UUencode,所以我就下載了UUencdoe的rpm來實作。
一開始我用UUencode測試一切順利,收下來的mail也都有夾檔,換到Gmail試試,偏偏天殺的Gmail似乎沒有支援UUencode&UUdecode以至於它會把附件給整個填進去mail的主文內容裡.....喔,My God!!!!!!難不成我要用時還要自己來copy&paste爾或是再轉寄到別的信箱?NO Way~
轉向第二條路邁進,以MIME的編碼工具來試,當然這比較多有mutt,mpack,metamail....,首先排除要使用interactive(交談式)模式的,因為不可能script跑起來你還能在電腦前回答它問題吧!,當然要寫也可以,需要與pipe(管線命令)配合,但何必勒,自己找麻煩不是件好事..=__=!!!。
這時尋求metamail來幫助,下載metamail的rpm來安裝,如果以PLD的套件包安裝會有套件相依性的問題(以我的Fedora core 2而言),所以最好以lib6的那個套件來裝,可以順利安裝。
metamail有metasend和mailto可以使用來送信,但mailto是interactive的,所以就先排除囉~而metasend可以下參數-b來跑過interactive mode全部以參數帶入。
其中必需要注意參數 -S ,因為一開始我沒設,結果它把我的檔案切割成好幾份來送..@@!!,後來查它的document才發現事有溪竅,我把-S(切割檔案的最小size)設到100000000,嘿...切不到了吧!
這次終於可以讓Gmail 看到是以夾帶檔案的型態呈現了,雖然仍不完美(附件檔案名稱為noname,我想是MIME的header有缺少的部份),但至少可以達到我要的功能,可以從Gmail直接把檔案存下來。目前只是我要用時需要把它rename 成*.tar.gz的檔案名稱。已經把script丟到每天的排程裡去了,測試個幾天看看吧。
以下(延伸閱讀)是我簡單寫的Script:
#################### Astaka backup data script ###################
# This script backup linux mysql database and mailto a e-mail account
# Build date: 2005/01/06
# Author : Astaka Wang
# E-mail : [email protected]
# Licence: GPL
####################------ Script start ------######################
#!/bin/bash
#where you want to save the backup files.
BACKUP_PATH=備份檔案的儲存路徑
#what mail you want to mail to.
RECEIVE_MAIL=填入e-mail account
#what your MySQL database server root's password.
MYSQL_ROOT_PASSWORD=MySQL資料庫伺服器的root密碼
#what database in MySQL server you want to backup.
MYSQL_BACKUP_DATABASE=欲備份MySQL內的資料庫名稱
#what backup filename you want to save.
MYSQL_BACKUP_DATABASE_FILENAME=欲儲存備份的檔案名稱
#Script will add the system time to filename automatic
#1.Dump mysql database from mysql server
mysqladmin -uroot -p$MYSQL_ROOT_PASSWORD flush-logs
mysqldump $MYSQL_BACKUP_DATABASE -uroot -p$MYSQL_ROOT_PASSWORD --opt > $BACKUP_PATH/MYSQL_BACKUP_DATABASE_FILENAME.sql
#2.Compress the sql file
tar -zcvpf $BACKUP_PATH/$MYSQL_BACKUP_DATABASE_FILENAME-`date +%y-%m-%d`.tar.gz $BACKUP_PATH/$MYSQL_BACKUP_DATABASE_FILENAME.sql
rm $BACKUP_PATH/$MYSQL_BACKUP_DATABASE_FILENAME.sql
#3.Use metasend to send the compressed file to a mail account
metasend -b -t $RECEIVE_MAIL -S 100000000 -s "$MYSQL_BACKUP_DATABASE_FILENAME `date +%y-%m-%d`.tar.gz" -f $BACKUP_PATH/$MYSQL_BACKUP_DATABASE_FILENAME-`date +%y-%m-%d`.tar.gz -m application/octet-stream -e base64