數(shù)據(jù)庫服務(wù)器 之 Postgresql備份和恢復(fù)_百度文庫_第1頁
數(shù)據(jù)庫服務(wù)器 之 Postgresql備份和恢復(fù)_百度文庫_第2頁
數(shù)據(jù)庫服務(wù)器 之 Postgresql備份和恢復(fù)_百度文庫_第3頁
數(shù)據(jù)庫服務(wù)器 之 Postgresql備份和恢復(fù)_百度文庫_第4頁
數(shù)據(jù)庫服務(wù)器 之 Postgresql備份和恢復(fù)_百度文庫_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)庫服務(wù)器之 Postgresql備份和恢復(fù)您是否遇到過因為不小心而刪除了某個數(shù)據(jù)庫表,或者是存放數(shù)據(jù)庫的磁盤損壞了的情況呢?如果碰到這種情況,我相信您會覺得非常的沮喪,因為您努力了幾個星期的工作成果可能就付之東流了。和任何包含珍貴數(shù)據(jù)的東西一樣,PostgreSQL數(shù)據(jù)庫也應(yīng)該經(jīng)常備份。如果您將數(shù)據(jù)存放在 PostgreSQL 表中,您就可以定時的進(jìn)行數(shù)據(jù)庫備份,從而避免發(fā)生上面的悲劇。PostgreSQL 自帶有內(nèi)置工具來執(zhí)行備份工作,而且在系統(tǒng)出現(xiàn)損壞或是意外時,您可以通過這些工具進(jìn)行“回滾”,并通過以前保存的快照將系統(tǒng)恢復(fù)到其初始的狀態(tài)。1. 綜述;PostgreSQL數(shù)據(jù)庫從備份

2、PostgreSQL 數(shù)據(jù)有三種完全不同的方法:SQL 轉(zhuǎn)儲文件系統(tǒng)級別備份在線備份每種備份都有自己的優(yōu)點和缺點,下面主要介紹SQl轉(zhuǎn)儲的方法;2. 數(shù)據(jù)備份;SQL 轉(zhuǎn)儲的方法是創(chuàng)建一個文本文件,這個文本里面都是 SQL 命令,當(dāng)把這個文件回饋給服務(wù)器時,將重建與轉(zhuǎn)儲時狀態(tài)一樣的數(shù)據(jù)庫。2.1 pg_dump;PostgreSQL 自帶的內(nèi)置備份工具叫做 pg_dump。這個工具是通過一系列的SQL語句讀取某個指定的數(shù)據(jù)庫并復(fù)制其中的內(nèi)容,以它作為快照并用于日后的數(shù)據(jù)恢復(fù)??蛻舳说椒?wù)器端的連接是用于執(zhí)行備份工作。這些備份文件就是前面所講的快照并可以用于日后的數(shù)據(jù)恢復(fù)。而保證客戶端與服務(wù)器端

3、的連接是執(zhí)行備份所必需的。這條命令的基本用法是:pg_dump dbname outfile注:在進(jìn)行上述工作之前,首先請確保您具有登錄到服務(wù)器并訪問您將要備份的數(shù)據(jù)庫或表的權(quán)限。您可以通過使用PostgreSQL 命令行客戶端psql,進(jìn)行服務(wù)器登錄。在客戶端中輸入主機(jī)名(-h,用戶名(-u和密碼(-p,以及數(shù)據(jù)庫名,然后就可以校驗?zāi)欠癖皇跈?quán)訪問。使用 pg_dump 非常的簡單只需要在命令提示符后面輸入將要導(dǎo)出的數(shù)據(jù)庫名就可以進(jìn)行備份工作了,如下例所示(根據(jù)您自己的安裝路經(jīng)更改PostgreSQL 路徑:xiaopxiaop-laptop:$ /usr/lib/postgresql/8.

4、2/bin/pg_dump -D -h localhost -U xiaop(用戶名 mydb(數(shù)據(jù)庫名稱 mydb.bak/ /C:Program FilesPostgreSQL8.2binpg_dump -hlocalhost -Upostgres tenantinfo c:t.dumpC:Program FilesPostgreSQL8.2bin/ /通過上面的命令就會創(chuàng)建一個名為 mydb.bak的文件,文件中記錄了用于恢復(fù)數(shù)據(jù)庫的SQL 命令。正如您所見,pg_dump 把結(jié)果輸出到標(biāo)準(zhǔn)輸出。我們下面就可以看到這樣做有什么好處。pg_dump 是一個普通的 PostgreSQL 客戶

5、端應(yīng)用(盡管是個相當(dāng)聰明的東西。這就意味著您可以從任何可以訪問該數(shù)據(jù)庫的遠(yuǎn)端主機(jī)上面進(jìn)行備份工作。但是請記住 pg_dump 不會以任何特殊權(quán)限運行。具體說來,就是它必須要有您想備份的表的讀權(quán)限,因此,實際上您幾乎總是要成為數(shù)據(jù)庫超級用戶。要聲明 pg_dump 應(yīng)該以哪個用戶身份進(jìn)行聯(lián)接,使用命令行選項 -h host 和 -p port。缺省主機(jī)是本地主機(jī)或您的環(huán)境變量PGHOST聲明的值。類似,缺省端口是環(huán)境變量PGPORT 或(如果它不存在的話編譯好了的缺省值。(服務(wù)器通常有相同的缺省,所以還算方便。和任何其他 PostgreSQL 客戶端應(yīng)用一樣, pg_dump 缺省時用與當(dāng)前操作

6、系統(tǒng)用戶名同名的數(shù)據(jù)庫用戶名進(jìn)行聯(lián)接。要覆蓋這個名字,要么聲明 -U 選項,要么設(shè)置環(huán)境變量PGUSER。請注意 pg_dump 的聯(lián)接也和普通客戶應(yīng)用一樣要通過客戶認(rèn)證機(jī)制。由 pg_dump 創(chuàng)建的備份在內(nèi)部是一致的,也就是說,在pg_dump運行的時候?qū)?shù)據(jù)庫的更新將不會被轉(zhuǎn)儲。 pg_dump 工作的時候并不阻塞其他的對數(shù)據(jù)庫的操作。(但是會阻塞那些需要排它鎖的操作,比如 VACUUM FULL。注: 如果您的數(shù)據(jù)庫結(jié)構(gòu)依賴于 OID (比如說用做外鍵,那么您必須告訴 pg_dump 把 OID 也倒出來。要倒 OID,可以使用 -o 命令行選項。缺省時也不會轉(zhuǎn)儲大對象。如果您使用大對

7、象,請參考 pg_dump 的命令手冊頁。2.2 pg_dumpall;如果您希望對整個系統(tǒng)中所有的數(shù)據(jù)庫進(jìn)行備份的話(而不是只對某一個數(shù)據(jù)庫進(jìn)行備份,您可以使用命令pg_dumpall 而不是pg_dump。執(zhí)行這個命令可以對PostgreSQL 所能識別的所有的數(shù)據(jù)庫(包括其自身的系統(tǒng)數(shù)據(jù)庫備份到一個文件中。下面給出了一個使用實例:xiaopxiaop-laptop:$ /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop(用戶名 all.bak這樣就會將localhost的所有數(shù)據(jù)庫備份到all.bak文件中了;2

8、.3 計劃任務(wù);為了保證您的備份時刻保持更新,您可以通過往cron table中加入pg_dump或者是pg_dumpall命令來定期執(zhí)行備份工作。這里給出了兩個cron entries的例子。第一個是在每天凌晨3點對test數(shù)據(jù)庫進(jìn)行備份,而第二個是在每個星期五的晚上9點對所有的數(shù)據(jù)庫進(jìn)行備份:xiaopxiaop-laptop:$ 0 3 * * * /usr/lib/postgresql/8.2/bin/pg_dump -D -h localhost -U xiaop(用戶名 mydb(數(shù)據(jù)庫名稱 /home/xiaop/mydb.bak0 21 * *xiaopxiaop-laptop

9、:$ 5 /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop(用戶名 /home/xiaop/all.bak3. 從轉(zhuǎn)儲中恢復(fù)3.1 用pg_dump恢復(fù);從備份中恢復(fù)數(shù)據(jù)的工作比執(zhí)行備份甚至更簡單您所要做的就是通過執(zhí)行備份文件中的SQL命令來對數(shù)據(jù)庫進(jìn)行恢復(fù)。如果您是使用pg_dump對某一個數(shù)據(jù)庫進(jìn)行了備份,那么備份中就會有CREATE TABLE 的語句來對源表進(jìn)行復(fù)制。當(dāng)然,您首先要新創(chuàng)建一個空數(shù)據(jù)庫來存放這些數(shù)據(jù)表。您可以使用createdb 這個工具來完成這一步工作,這個工具也是PostgreSQL 套件中

10、的一部分:xiaopxiaop-laptop:$ /usr/lib/postgresql/8.2/bin/createdb mydb(數(shù)據(jù)庫名稱現(xiàn)在您就可以執(zhí)行備份文件中的SQL命令來對數(shù)據(jù)庫進(jìn)行恢復(fù)了, pg_dump 生成的文本文件可以由 psql 程序讀取。從轉(zhuǎn)儲中恢復(fù)的常用命令格式是:psql dbname infile如下例所示:xiaopxiaop-laptop:$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop(用戶名 -d mydb(數(shù)據(jù)庫名稱 mydb.bak3.2 用pg_dumpall恢復(fù);如果您是使用pg_d

11、umpall對所有的數(shù)據(jù)庫進(jìn)行備份的,就沒有必要先新建一個數(shù)據(jù)庫,因為備份文件中已經(jīng)包含了完成CREATE DATABASE工作的相關(guān)的調(diào)用。在這里,只需要在psql 命令行客戶端中輸入對應(yīng)的備份文件就可以了,而不需要指定目標(biāo)數(shù)據(jù)庫:xiaopxiaop-laptop:$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop(用戶名 mydbBACK.gz4.2 恢復(fù)大數(shù)據(jù)庫;用下面命令恢復(fù):xiaopxiaop-laptop:$ createdb mydbNEW(新數(shù)據(jù)庫名xiaopxiaop-laptop:$ gunzip -c my

12、dbBACK.gz | psql mydbNEW或者xiaopxiaop-laptop:$ cat mydbBACK.gz | gunzip | psql mydbNEW4.3 使用 split;4.3.1 分割;split 命令允許您用下面的方法把輸出分解成操作系統(tǒng)可以接受的大小。有關(guān)split的用法可以在文件的切分split和結(jié)合工具cat 介紹中查詢。比如,讓每個塊大小為 1 兆字節(jié):xiaopxiaop-laptop:$ pg_dump dbname | split -b 1m - filename4.3.2 合并;分割后可以用下面的命令恢復(fù):xiaopxiaop-laptop:$createdb dbnamexiaopxiaop-lapto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論