2010年10月14日 星期四

PostgreSQL-如何在Freebsd底下使用pg_dump 定時對DB做備份

介紹pg_dump &&  pg_restore

pg_dump :
先說明幾個比較有用的參數!!!
參數-F p:輸出純SQL文件(預設)
參數-F t:輸出適合輸入到 pg_restore 裡的tar歸檔文件。
參數-F c:輸出適於給 pg_restore 用的客戶化歸檔。 這是最靈活的格式,它允許對裝載的資料和對像定義進行重新排列。
參數-b:在轉儲中包含大對象。必須選擇一種非文本輸出格式。
參數-v:顯示一些dump 的log
參數-O:不把對象的所有權設置為對應源資料庫。

Step1: Create Shell Script
           底下我提供一個Script,此Script是針對DB使用的,如果要拿到別的地方用要改一下參數
           基本上改路經就OK了~~將此檔存成一個文件就能執行了(副檔名.sh為了方便識別)

============================================================================
 #!/bin/sh
date=`date +%Y%m%d`
times=`date +%Y%m%d%H%M`
hostname="7s_DB"
# Location of the backup logfile.
logfile="/usr/home/cuser/backup/DUMP/$date/backup_logfile.log"
# Location to place backups.
backup_dir="/usr/home/cuser/backup/DUMP/$date"
mkdir -p $backup_dir
touch $logfile

databases=`/usr/local/bin/psql -h 127.0.0.1 -U pgsql -p 6789-q -d postgres -c "SELECT datname FROM pg_database;" | sed -n 5,/\eof/p | grep -v rows\)`
for i in $databases; do
        timeinfo=`date +%Y%m%d%H%M`
        echo "Backup and Vacuum complete at $timeinfo for time slot $times on database: $i " >> $logfile
        /usr/local/bin/vacuumdb -z -h 127.0.0.1 -p 6789 -U pgsql $i >/dev/null 2>&1
        /usr/local/bin/pg_dump -F c -b -v $i -U pgsql -h 127.0.0.1 -p 6789 > "$backup_dir/$hostname-$i-$times.sql"
done
echo "-----------------------------------------------------------------------------" >> $logfile
============================================================================


Step2: Create Crontab
           這邊是說明如何~ 建立備份排程!同樣是以七魂DB為例!
           設定每天凌晨1點去執行/usr/home/cuser/backup_dump.sh 這支SCRIPT
============================================================================
#crontab -e(編輯crontab )

00 01 * * * /bin/sh /usr/home/cuser/backup_dump.sh >  /dev/null &
#crontab -l(列出crontab )

============================================================================




pg_restore:
         這邊同樣以DB的restore來講!!
         如果今天我們要將備份檔還原到其他機器上的話!!可以參考以下範例!

 EX: pg_restore -h 127.0.0.1  -p 6789 -U postgres -W -C  -O -d test -v "/backup/20100902/7s_DB-TOOLDB-201009021106.sql"
參數-c及-C不能同時使用
參數-O:不要將原本的DB OWNER帶進來!!而是以執行pg_restore的USER變成該DB OWNER(上例:DB OWNER=postgres)
參數-d:如果不與-C同時使用,則是將資料復原到某個資料庫中(上例:復原到test)
          如果不與-C同時使用,則是將資料復原到某個資料庫中(上例:復原到TOOLDB)
參數-v:顯示一些restore 的log

沒有留言:

張貼留言