備份和恢復postgreSQL資料庫

greenteazsh發表於2013-05-03
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE你是否遇到過因為不小心而刪除了某個資料庫表,或者是存放資料庫的磁碟損壞了的情況呢?如果碰到這種情況,我相信你會覺得非常的沮喪,因為你努力工作了幾個星期的成果可能就付之東流了。

但是,你也不必每次都陷入這種困境。如果你將資料存放在 PostgreSQL 表中,你就可以定時的進行資料庫備份,從而避免上述悲劇的發生。PostgreSQL 自帶有內建工具來執行備份工作,而且在系統出現損壞或是意外時,你可以通過這些工具進行回滾,並通過以前儲存的快照將系統恢復到其初始的狀態。

資料備份

PostgreSQL 自帶的內建備份工具叫做 pg_dump。這個工具是通過一系列的SQL語句讀取某個指定的資料庫並複製其中的內容,以它作為快照並用於日後的資料恢復。客戶端到伺服器端的連線是用於執行備份工作。這些備份檔案就是前面所講的快照並可以用於日後的資料恢復。而保證客戶端與伺服器端的連線是執行備份所必需的。

注意: 在進行上述工作之前,首先請確保你具有登入到伺服器並訪問你將要備份的資料庫或表的許可權。你可以通過使用PostgreSQL 命令列客戶端——psql,進行伺服器登入。在客戶端中輸入主機名(-h),使用者名稱(-u)和密碼(-p),以及資料庫名,然後就可以校驗你是否被授權訪問。

使用 pg_dump 非常的簡單——只需要在命令提示符後面輸入將要匯出的資料庫名就可以進行備份工作了,如下例所示(根據你自己的安裝路經更改PostgreSQL 路徑):

$ /usr/local/pgsql/bin/pg_dump -D -h localhost -U pgsql test > test.bak

通過上面的命令就會建立一個名為test.bak的檔案,檔案中記錄了用於恢復資料庫的SQL命令。在這個檔案中你可以看到類似於下面這個例子中所列出的內容:

--

-- Name: pets; Type: TABLE; Schema: public; Owner: root; Tablespace:

--

 

CREATE TABLE pets (

species character varying,

name character varying

);

 

ALTER TABLE public.pets OWNER TO root;

 

--

-- Data for Name: pets; Type: TABLE DATA; Schema: public; Owner: root

--

 

INSERT INTO pets (species, name) VALUES ('dog', 'Sparky');

INSERT INTO pets (species, name) VALUES ('cat', 'Tabitha');

如果你希望對整個系統中所有的資料庫進行備份的話(而不是隻對某一個資料庫進行備份),你可以使用命令pg_dumpall 而不是pg_dump。執行這個命令可以對PostgreSQL 所能識別的所有的資料庫(包括其自身的系統資料庫) 備份到一個檔案中。下面給出了一個使用例項:

$ /usr/local/pgsql/bin/pg_dumpall -D -h localhost -U pgsql > all.bak

為了保證你的備份時刻保持更新,你可以通過往cron table中加入pg_dump或者是pg_dumpall命令來定期執行備份工作。這裡給出了兩個cron entries的例子。第一個是在每天凌晨3點對test資料庫進行備份,而第二個是在每個星期五的晚上9點對所有的資料庫進行備份:

0 3 * * * /usr/local/pgsql/bin/pg_dump -D -h localhost -U pgsql test > /disk2/test.bak0 21 * *

5 /usr/local/pgsql/bin/pg_dumpall -D -h localhost -U pgsql > /disk2/all.bak

資料恢復

從備份中恢復資料的工作比執行備份甚至更簡單——你所要做的就是通過執行備份檔案中的SQL命令來對資料庫進行恢復。如果你是使用pg_dump對某一個資料庫進行了備份,那麼備份中就會有CREATE TABLE 的語句來對源表進行復制。當然,你首先要新建立一個空資料庫來存放這些資料表。你可以使用createdb 這個工具來完成這一步工作,這個工具也是PostgreSQL 套件中的一部分:

$ /usr/local/pgsql/bin/createdb restored

現在你就可以執行備份檔案中的SQL命令來對資料庫進行恢復了,如下例所示:

$ /usr/local/pgsql/bin/psql -h localhost -U pgsql -d restored < test.bak

如果你是使用pg_dumpall對所有的資料庫進行備份的,就沒有必要先新建一個資料庫,因為備份檔案中已經包含了完成CREATE DATABASE工作的相關的呼叫。在這裡,只需要在psql命令列客戶端中輸入對應的備份檔案就可以了,而不需要指定目標資料庫:

$ /usr/local/pgsql/bin/psql -h localhost -U pgsql < all.bak

一旦資料恢復完成後,你就可以登入到伺服器並檢視到已恢復的資料。

相關文章