postgresql提供了三種備份和恢復的方式:sql dump、檔案系統複製和聯機熱備份。 每一種備份方式都有自己的優點和缺點,下面將詳細介紹。
9.1 sql dump
這種備份方式產生乙個文字檔案,裡面包含建立各種資料庫物件的sql語句和每個表中的資料。另外,表上建立的索引中的資料不會被匯出,只會匯出索引的定義資訊。在恢復資料庫的時候,索引會被重建。可以使用資料庫提供的工具pg_dumpall和pg_dump來進行備份。pg_dumpall會備份乙個資料庫集群中的所有資訊和資料。pg_dump只備份資料庫集群中的某個資料庫的資料,它不會匯出角色和表空間相關的資訊,因為這些資訊是整個資料庫集群共用的,不屬於某個單獨的資料庫。pg_dump的基本用法如下:
pg_dump 資料庫名 > 備份檔案名
pg_dump將結果寫到標準輸出中,可以用作業系統的重定向命令將結果寫到檔案中。
可以在執行資料庫的機器上執行pg_dump命令,也可以在其它的機器上執行pg_dump命令。 可以使用選項-h和-p來指定執行資料庫的主機名和資料庫監聽的埠。例如:
pg_dump -h db_server1 -p 5432
product > backup_file
該命令連線機器db_server1上在埠5432處監聽的資料庫,將資料庫product的資料備份到檔案backup_file中。如果pg_dump命令沒有使用-h和-p選項,將使用環境變數pghost的值作為機器名,使用環境變數pgport的值作為資料庫的埠。如果使用者沒有定義環境變數pghost,預設使用本機名作為執行資料庫的機器名。
預設的情況下,pg_dump使用當前的作業系統使用者作為連線資料庫時使用的使用者。可以使用選項-u或者設定環境變數pguser來指定連線資料庫時使用的使用者名稱。例如:
pg_dump -u liming -h db_server1 -p 5432
product > backup_file
該命令使用使用者liming連線機器db_server1上在埠5432處監聽的資料庫,將資料庫product的資料備份到檔案backup_file中。
一般情況下,應該使用超級使用者連線資料庫進行備份操作,因為超級使用者可以訪問資料庫中的任何資訊。使用普通資料使用者連線資料庫,有些表可能無法訪問。
執行pg_dump時,資料可以正常地執行其它操作。但alter table這類修改資料庫物件定義的操作會受到影響,可能會長時間處於等待狀態而無法執行,所以在執行pg_dump命令時,不要在資料庫中執行修改資料庫物件定義的操作。
另外要注意的是,如果資料庫中有些表使用oid來實現外來鍵約束,應當在備份資料庫時同時備份表的oid資訊,使用pg_dump時加上選項–o即可達到這個目的。
9.1.1
恢復資料庫
pg_dump建立的備份檔案可以被工具psql識別。因此可以使用psql來讀取pg_dump建立的備份檔案,實現恢復資料庫的功能。例如:
psql dbname
< backup_file
psql後面的引數dbname指定的資料庫必須已經存在。如果不存在,使用者應當先建立dbname指定的資料庫,然後再執行恢復資料的命令。psql也支援和pg_dump一樣的命令列選項,如-h和-p等。建立資料庫dbname時,必須使用template0作為模板資料庫,可以使用工具createdb建立資料庫,也可以在psql中執行sql命令create database來建立資料庫。下面是兩個例項:
(1)createdb -t template0 dbname
(2)create database dbname template=template0
另外,在執行恢復資料的操作以前,那些擁有資料庫備份中的資料庫物件或則對這些物件有訪問許可權的資料庫的使用者必須已經在資料庫中存在,否則,恢復資料庫以後,資料庫備份中的資料庫物件的所有者會發生改變。
預設的情況下,psql命令會一直執行下去直到結束,即使中間遇到sql錯誤,恢復操作也會繼續執行。如果想讓psql在執行過程中遇到錯誤以後,停止恢復操作,可以在執行恢復操作以前,在psql中執行下面的命令:
\set on_error_stop
如果psql在執行過程中遇到錯誤,則只有一部分資料被正確地恢復,這時被恢復資料庫中的資料是不完整的。psql提供了另外一種恢復模式,在這種模式下,一旦恢復操作執行過程中遇到任何錯誤,已經恢復的資料都會自動從資料庫中被刪除。可以使用psql的命令列選項-l或--single-transaction來開啟這種模式。
在恢復操作結束以後,應該使用analyze命令來重新收集查詢優化器統計資料。
9.1.2
使用pg_dumpall
pg_dump只備份資料庫集群中的某個資料庫的資料,它不會匯出角色和表空間相關的資訊。pg_dumpall則可以匯出整個資料庫集群中所有的資料庫中的資料,同時也會匯出角色、使用者和表空間的定義資訊。使用pg_dumpall的一般命令格式如下:
pg_dumpall > backup_file
pg_dumpall也支援和pg_dump一樣的命令列選項,如-h和-p等。同樣可以使用psql來從pg_dumpall建立的備份檔案中恢復資料庫。應該使用資料庫超級使用者來進行恢復資料庫的操作。命令格式如下:
psql -f backup_file postgres
pg_dumpall在執行的過程中,用postgres作為使用者名稱來連線資料庫。系統自動建立的資料庫postgres中的內容也會被匯出來,資料庫template0和template1中的內容不會被匯出來。
9.1.3
大型資料庫的備份和恢復
如果資料庫的規模比較大,產生的備份檔案的大小超級了作業系統能夠允許的單個檔案的大小的最大值,可以使用壓縮和將備份檔案分成對個部分這兩個方法來解決這個問題。
(1)採用壓縮的方法,可以採用作業系統提供的任何一種壓縮工具來實現,常用的是gzip。例如:
pg_dump dbname | gzip > filename.gz
恢復時,使用下面的命令:
gunzip -c filename.gz | psql dbname
也可以使用下面的命令來恢復資料庫:
cat filename.gz | gunzip | psql dbname
(2)將備份檔案分成多個部分。使用作業系統的工具split來實現。例如:
pg_dump dbname | split -b 1m - filename
在這個例子中,資料庫備份被分成多個大小為1mb的檔案。
使用下面的命令進行恢復操作:
cat filename* | psql dbname
(3)使用pg_dump自帶的壓縮功能。這種方法產生的備份檔案也是被壓縮的,同第一種方法相比,它有乙個優點,就是可以只恢復備份檔案中的某個表的資料。這種方法的命令格式如下,就是增加了選項-fc:
pg_dump -fc dbname > filename
不能使用psql命令恢復用這種方法備份的資料,必須使用pg_restore來進行恢復操作。命令格式如下:
pg_restore -d dbname
filename
對於非常大的資料庫,可以將壓縮與分割的方法同時使用(同時使用第一種和第二種方法,或者同時使用第二種和第三種方法)。
9.2檔案系統複製
檔案系統複製這種方法是直接複製所有的資料庫檔案,存放到其它的儲存介質上。這是最簡單的備份資料庫的方法。可以使用作業系統的命令來完成備份,例如:
tar -cf backup.tar /usr/local/pgsql/data
複製資料檔案以前,必須關閉資料庫。這種備份方法產生的備份檔案比較大,因為索引資料也會被備份。恢復資料庫時只要把備份檔案複製到存放資料檔案的目錄中即可。
9.3 聯機熱備份與歸檔恢復9.3.1
聯機熱備份
進行聯機熱備份時,不用關閉資料庫。資料庫可以正常地執行其它操作。如果要使聯機熱備份,資料庫必須執行在歸檔模式下,將引數資料庫archive_mode設為on,然後再將引數archive_dir設成乙個啟動資料庫的作業系統使用者有讀寫許可權的目錄,資料庫就會執行在歸檔模式。要使這兩個引數生效,必須重新啟動資料庫。
備註:在windwos下安裝的postgres後可以在程式->postgresql 8.2->command prompt開啟命令視窗。
mysql 備份與恢復 MySQL 備份與恢復
1 檢視資料庫的資料儲存在哪個目錄下 shiyanlou mysql uroot e show variables like datadir variable name value datadir var lib mysql 2 備份資料的方法 select into outfile 檔名 或者 s...
mysql 備份與恢復 Mysql 備份與恢復
資料檔案一致性處理 在完全備份的情況下,檔案不是時間點一致的,因為進行快照的時間點不一樣。如果嘗 試在未prepare資料的情況下還原資料庫,雖然操作上支援恢復,但是在啟動的時候仍會 進行資料recovery。執行帶 prepare 選項的 mariabackup 命令會使資料檔案進行統一,達到資料...
備份與恢復
一 需要備份的資料 1 linux需要備份的資料 a root 目錄 b home 目錄 c var log 目錄 d etc 目錄 2 apache需要備份的資料 a 配置檔案 b 網頁目錄 c 日誌檔案 3 mysql需要備份的資料 1 原始碼包安裝的mysql usr local mysql ...