2005年3月28日

自動備份資料庫到_GMAIL_上

延續自 利用 GMail 做自動備份 的想法,正式實作自動將 blog 的資料庫備份到 GMAIL 上的作法。

雖然在公司用過 mpack 套件來寄送夾檔信件,不過好像網路上都不怎麼推薦,好吧,我也來裝 metamail 好了。在安裝 metamail 前我先用了很大一點力氣進行了 mail server (postfix) 的建置。

Dump postgresql 資料庫

postgresql 提供一個 pg_dump 工具程式進行資料庫備份,以下的用法不需透過 postgres 這個資料庫管理員進行備份作業(其餘參數詳參 man pages):
# -f 表示輸出檔檔名
# -U 表示指定資料庫擁有者帳號
# -d 表示指定資料庫名稱
pg_dump -f $DUMP_PATH/$DUMP_FILE -U $DB_OWNER -d $DB_NAME

寄送附檔

metamail 的 metasend 可以寄送帶附檔的信件,參考用法如下:
# -b : 批次作業
# -e base64 : 使用 base 64 編碼
# -S 8388608 : 設定信件分割傳送大小, 單位應該是 bytes。
# -f $ARCHIVE_PATH/$ARCHIVE_FILE : 附檔位置及名稱
# -F $FROM_EMAIL : 寄件人信箱
# -m "$CONTENT_TYPE" : 附件類型, 
#    設定方式為 CONTENT_TYPE="application/octet-stream; name=\"$ARCHIVE_FILE\"", 
#    $ARCHIVE_FILE 即為顯示用檔名!
# -s "$SUBJECT" : 信件主旨
# -t $RCV_EMAIL : 收件人信箱
metasend -b -e base64 -S 8388608 \
-f $ARCHIVE_PATH/$ARCHIVE_FILE -F $FROM_EMAIL \
-m "$CONTENT_TYPE" -s "$SUBJECT"  -t $RCV_EMAIL

2006-09-17 補充: 如果你的 metasend 運作的有點不良,那麼改用 mpack 真的是個好點子!

mpack -s "$SUBJECT" -c "$CONTENT_TYPE" "$ARCHIVE_PATH/$ARCHIVE_FILE" "$RCV_EMAIL"

其他

  1. 其實看了一下,好像 mpack 的指令比較簡單… @@!!
  2. 完整指令稿情參考 backup.database.sh 自行修改。
  3. 另外建議在 GMAIL 上設定一個 FILTER ,將收到的資料庫壓縮檔直接放進 垃圾筒 中,可以免除後續刪信的動作。GMAIL 的圾垃筒會在保留 30 天後將信刪除!
  4. 執行後的成果:GMAIL收到備份檔