Barg the Blog

You're looking at an article archive of Barg the Blog, all contents here are no longer updated.

Please update your bookmark to Grid.in.th.


PostgreSQL Dirty Database Backup

พยายามหาสคริตป์สำหรับแบคอัพฐานข้อมูล PostgreSQL อยู่ซักพักนึง แต่หาตัวที่ทำอย่างที่ต้องการไม่ได้ซะที เลยคิดว่าเขียนเองแบบสกปรกๆ ใช้ไปก่อนดีกว่า เลยได้ออกมาหน้าตาแบบนี้ (เซ็ทรหัสผ่านในไฟล์ ~/.pgpass และ chmod 600 เอา)

#!/usr/bin/env bash
# Set user information inside ~/.pgpass and chmod 600 it.

# Configurations
DATABASE="dbname"
USERNAME="username"
SAVE_PATH="/backup"
DAYS=7

# Generate datetime for file naming
DATE_FILE=`date '+%Y-%m-%d-%H-%M-%S'`
DB_FILENAME="$DATABASE-$DATE_FILE.dump"
DB_FILEPATH="$SAVE_PATH/$DB_FILENAME"
SAVE_FILE="$SAVE_PATH/$DATABASE-$DATE_FILE.tar.bz2"

# Run
/usr/local/bin/pg_dump -U $USERNAME --no-owner $DATABASE > $DB_FILEPATH
cd $SAVE_PATH
/usr/bin/tar -cjf $SAVE_FILE $DB_FILENAME
/bin/rm $DB_FILEPATH

# Clean older files
/usr/bin/find $SAVE_PATH/* -mtime +$DAYS -name '*.tar.bz2' -exec rm {} \;

คิดว่าบรรทัดสุดท้ายคงใช้เป็น /usr/bin/find $SAVE_PATH/* -mtime +$DAYS -name '*.tar.bz2' -delete ไปเลยจะน่าปลอดภัยขึ้น แต่ตอนนี้ไม่อยากแก้อะไรที่มันทำงานได้อยู่แล้ว ดังนั้นปล่อยมันเป็นงี้ไปก่อนดีกว่า…

ไฟล์ที่ออกมาจะหน้าตาเป็น dbname-2008-12-18-17-30-00.tar.bz2 และจะเก็บไว้เพียงของ 7 วันสุดท้าย ผมตั้ง cron ให้มันรันทุกๆ 6 ชั่วโมง และ rsync ไปยังเซิฟเวอร์สำรองเอา น่าจะสบายใจได้พอสมควร

Back