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 ไปยังเซิฟเวอร์สำรองเอา น่าจะสบายใจได้พอสมควร