Home | Back


การ backup ฐานข้อมูลของ postgresql

Sunday, 22 April 2007



ปัจจุบันมีฐานข้อมูลให้เลือกใช้หลายยี่ห้อให้เลือกใช้กัน โดยส่วนตัวผมได้เลือกใช้ postgresql เป็นฐานข้อมูลที่ใช้ในการพัฒนาโปรแกรม เพราะเป็นฐานข้อมูลที่มีความเสถียรสูง และมี feature ที่ดีดีเยอะ แต่มีสิ่งสำคัญสิ่งหนึ่งสำหรับระบบฐานข้อมูลนั้นคือการ backup ฐานข้อมูลนั่นเอง ผมได้ไปพบ code ที่เป็น script สำหรับการ backup ฐานข้อมูลจาก postgresql ที่น่าสนใจตัวนึงเลยนำมา post เก็บไว้

ให้เราเพิ่มบรรทัดในไฟล์ /etc/crontab ดังนี้ครับ

File : /etc/crontab

แล้วทำการสร้างไฟล์สคริป backup โดยมีโค้ดดังนี้ครับ แต่ทั้งนี้เครื่องของเราต้องมี ralation กับ host ของฐานข้อมูลแบบ trust นะครับ

#!/bin/bash
# Location of the backup logfile.
logfile="/path/to/logfile.log"
# Location to place backups.
backup_dir="/directory/to/place/backups"
touch $logfile
timeslot=`date +%H-%M`
databases=`psql -h localhost -U postgres -q -c "\l" | sed -n 4,/\eof/p | grep -v rows\) | awk {'print $1'}`

for i in $databases; do
      timeinfo=`date '+%T %x'`
      echo "Backup and Vacuum complete at $timeinfo for time slot $timeslot on database: $i " >> $logfile
      /server/pgsql/bin/vacuumdb -z -h localhost -U postgres $i >/dev/null 2>&1
      /server/pgsql/bin/pg_dump $i -h 127.0.0.1 | gzip > "$backup_dir/postgresql-$i-$timeslot-database.gz"
done

ถ้าหากต้องการทำการ backup เองด้วยมือ เราสามารถใช้คำสั่ง pg_dump ได้ดังตัวอย่างนี้ครับ

โดยพารามิเตอร์
-h จะหมายถึง host ของฐานข้อมูลเรา พารามิเตอร์
-f จะหมายถึงไฟล์ที่จะเก็บฐานข้อมูลเรา และ
-U จะหมายถึงชื่อผู้ใช้ในฐานข้อมูล และ databasename จะหมายถึงชื่อของฐานข้อมูลครับ

ส่วนการ restore เราสามารถทำได้ด้วยคำสั่ง psql ดังตัวอย่างนี้ครับ

ความหมายของพารามิเตอร์จะเหมือนกับคำสั่ง pg_dump นะครับ แต่ที่เพิ่มมาคือพารามิเตอร์ -d จะหมายถึงชื่อฐานข้อมูลครับ

อืม….ขอให้มีความสุขกับการดูแลฐานข้อมูลนะครับ :)



Home | Back