PostgreSQL之pgdump備份恢復操作
邏輯備份在恢復時,介於邏輯備份與故障時間點之間的資料難以恢復,故一般不採取邏輯備份方式進行資料庫備份,但邏輯適用於跨平臺跨版本的資料遷移;
邏輯備份恢復主要以下三種:
pg_dump
pg_dumpall
copy
本小節主要講解pg_dump
pg_dump備份
只能備份單個數據庫,不會匯出角色和表空間相關的資訊
-F c 備份為二進位制格式,壓縮儲存.並且可被pg_restore用於精細還原
-F p 備份為文字,大庫不推薦
pg_dump恢復
psql dbname -U username < bakfile
或
pg_restore – pg_restore [option] ... [filename] – pg_restore -d dbname bakfile
二進位制格式的備份只能使用pg_restore來還原,可以指定還原的表,編輯TOC檔案,定製還原的順序,表,索引等。
文字格式的備份還原,直接使用使用者連線到對應的資料庫執行備份文字即可,例如psql dbname -f bak.sql
pg_dump備份恢復示例
1)建立資料庫
createdb testdb
2)連入資料庫testdb
psql testdb
3)建立測試表,插入資料
testdb=# create table tt(a int) tablespace tbls_t; testdb=# insert into tt(a) values(1); testdb=# insert into tt(a) values(2);
4)檢視資料
testdb=# select * from tt;
5)備份
pg_dump testdb>/dbbak/testdb.sql #簡單語法,可結合選項靈活備份
6)刪除資料庫testdb
dropdb testdb
7)建立新資料庫(恢復之前需建立資料庫)
createdb testdb
8)恢復資料
psql testdb </dbbak/testdb.sql
9)檢視資料是否回覆
psql testdb
testdb=# select * from tt;
至此,資料已成功恢復!
pg_restore -d postgres /dbbak/pgdumpbak/p.dmp
pg_dump備份恢復命令擴充套件練習
pg_dump -F c -f /dbbak/pgdumpbak/c.dmp -C -E UTF8 -h 127.0.0.1 -U postgres testdb #二進位制格式備份檔案 pg_dump -F p -f /dbbak/pgdumpbak/p.dmp -C -E UTF8 -h 127.0.0.1 -U postgres testdb #文字格式備份檔案,”-C” 表示包含建立語句 pg_restore /dbbak/c.dmp|less 可以解析二進位制格式的備份檔案 pg_restore -l /dbbak/c.dmp pg_restore -d testdb /dbbak/pgdumpbak/c.dmp #需要先建立目標庫 pg_restore -d postgres /dbbak/pgdumpbak/p.dmp #檔案中包含建立資料庫的命令,不需要建立目標庫
toc檔案選擇性備份恢復
1)根據二進位制備份檔案生成toc檔案
pg_restore -l -f /dbbak/pgdumpbak/toc /dbbak/pgdumpbak/c.dmp
2)修改 toc檔案,以首行加分號“;”的方式註釋掉不用還原的內容
3)以toc檔案列表做恢復
pg_restore -F c -L /dbbak/pgdumpbak/toc -d testdb /dbbak/pgdumpbak/c.dmp
補充:Postgresql備份與還原命令pg_dump
postgresql資料庫的備份和還原命令pg_dump
常用命令:
備份:
pg_dump -U postgres -d myDBname -f dump.sql
其中
postgres是使用者名稱
myDBname是資料庫名
dump.sql是檔名
還原:
createdb newDBname
psql -d newDBname -U postgres -f dump.sql
其中
postgres是使用者名稱
newDBname是資料庫名
dump.sql是檔名
參考:
pg_dump 把一個數據庫轉儲為純文字檔案或者是其它格式. 用法: pg_dump [選項]... [資料庫名字] 一般選項: -f,--file=FILENAME 輸出檔案或目錄名 -F,--format=c|d|t|p 輸出檔案格式 (定製,目錄,tar) 明文 (預設值)) -j,--jobs=NUM 執行多個並行任務進行備份轉儲工作 -v,--verbose 詳細模式 -V,--version 輸出版本資訊,然後退出 -Z,--compress=0-9 被壓縮格式的壓縮級別 --lock-wait-timeout=TIMEOUT 在等待表鎖超時後操作失敗 -?,--help 顯示此幫助,然後退出 控制輸出內容選項: -a,--data-only 只轉儲資料,不包括模式 -b,--blobs 在轉儲中包括大物件 -c,--clean 在重新建立之前,先清除(刪除)資料庫物件 -C,--create 在轉儲中包括命令,以便建立資料庫 -E,--encoding=ENCODING 轉儲以ENCODING形式編碼的資料 -n,--schema=SCHEMA 只轉儲指定名稱的模式 -N,--exclude-schema=SCHEMA 不轉儲已命名的模式 -o,--oids 在轉儲中包括 OID -O,--no-owner 在明文格式中,忽略恢復物件所屬者 -s,--schema-only 只轉儲模式,不包括資料 -S,--superuser=NAME 在明文格式中使用指定的超級使用者名稱 -t,--table=TABLE 只轉儲指定名稱的表 -T,--exclude-table=TABLE 不轉儲指定名稱的表 -x,--no-privileges 不要轉儲許可權 (grant/revoke) --binary-upgrade 只能由升級工具使用 --column-inserts 以帶有列名的INSERT命令形式轉儲資料 --disable-dollar-quoting 取消美元 (符號) 引號,使用 SQL 標準引號 --disable-triggers 在只恢復資料的過程中禁用觸發器 --enable-row-security 啟用行安全性(只轉儲使用者能夠訪問的內容) --exclude-table-data=TABLE 不轉儲指定名稱的表中的資料 --if-exists 當刪除物件時使用IF EXISTS --inserts 以INSERT命令,而不是COPY命令的形式轉儲資料 --no-security-labels 不轉儲安全標籤的分配 --no-synchronized-snapshots 在並行工作集中不使用同步快照 --no-tablespaces 不轉儲表空間分配資訊 --no-unlogged-table-data 不轉儲沒有日誌的表資料 --quote-all-identifiers 所有識別符號加引號,即使不是關鍵字 --section=SECTION 備份命名的節 (資料前,資料,及 資料後) --serializable-deferrable 等到備份可以無異常執行 --snapshot=SNAPSHOT 為轉儲使用給定的快照 --strict-names 要求每個表和/或schema包括模式以匹配至少一個實體 --use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替 ALTER OWNER 命令來設定所有權 聯接選項: -d,--dbname=DBNAME 對資料庫 DBNAME備份 -h,--host=主機名 資料庫伺服器的主機名或套接字目錄 -p,--port=埠號 資料庫伺服器的埠號 -U,--username=名字 以指定的資料庫使用者聯接 -w,--no-password 永遠不提示輸入口令 -W,--password 強制口令提示 (自動) --role=ROLENAME 在轉儲前執行SET ROLE 如果沒有提供資料庫名字,那麼使用 PGDATABASE 環境變數 的數值. 報告錯誤至 <[email protected]>.
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。