POSTGRESQL 備份與恢復(fù)幾種方法

一口锭、Copy

COPY在 PostgreSQL表和標(biāo)準(zhǔn)文件系統(tǒng)文件之間 移動(dòng)數(shù)據(jù)尤泽。COPY TO把一個(gè)表的內(nèi)容復(fù)制 到一個(gè)文件,而COPY FROM 則從一個(gè)文件復(fù)制數(shù)據(jù)到一個(gè)表(把數(shù)據(jù)追加到表中原有數(shù)據(jù))。COPY TO也能復(fù)制一個(gè) SELECT查詢的結(jié)果产园。 支持text、 csv(逗號(hào)分隔值)或者binary夜郁。 默認(rèn)是text什燕。

(一)語法:

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }

? ? TO { 'filename' | PROGRAM 'command' | STDOUT }

[ [ WITH ] ( option [, ...] ) ]

COPY table_name [ ( column_name [, ...] ) ]

? ? FROM { 'filename' | PROGRAM 'command' | STDIN }

[ [ WITH ] ( option [, ...] ) ]

(二)常用參數(shù)

table_name,column_name竞端,query屎即,filename

(三)示例:

導(dǎo)出表

COPY user TO '/tmp/data/test.csv' WITH csv;

導(dǎo)出字段

COPY user(name,password) TO '/tmp/data/test.csv' WITH csv;

COPY (select name,age from user) TO '/tmp/data/test.csv' WITH csv header;

導(dǎo)入表

COPY user from '/tmp/data/test.csv' ;

(四)注意事項(xiàng):

COPY TO只能被用于純粹的表,不能用于視圖事富。 不過你可以寫COPY (SELECT * FROM viewname) TO ... 拷貝一個(gè)視圖的當(dāng)前內(nèi)容技俐。

COPY FROM可以被用于純粹的表和具有 INSTEAD OF INSERT觸發(fā)器的視圖。 同時(shí)調(diào)用目標(biāo)表上的任何觸發(fā)器 和檢查約束统台。

COPY命令的用戶必須是 PostgreSQL用戶(運(yùn)行服務(wù)器的用戶 ID)可訪問的并且是可讀或者可寫的雕擂。 只允許數(shù)據(jù)庫超級(jí)用戶COPY一個(gè)文件或者命令, 因?yàn)樗试S讀取或者寫入服務(wù)器有特權(quán)訪問的任何文件饺谬。

COPY默認(rèn)利用tab作為列的界限捂刺,空格作為字符

二、Pg_dump

pg_dupg_dump — 把PostgreSQL數(shù)據(jù)庫抽取為一個(gè)腳本文件或其他歸檔文件

(一)語法

Pg_dump [connection-option...] [option...] [dbname]

樣例:pg_dump dbname > outfile

psql dbname < infile

pg_restore -d newdb db.dump

(二)常用參數(shù):

-a? --data-only

-b? --blobs

-B? --no-blobs

-c? --clean

d? directory

-j njobs? --jobs=njobs

-n schema? --schema=schema

-t table? --table=table

參數(shù)命令中大小寫會(huì)造成語義相反募寨。

(三)示例:

要把一個(gè)數(shù)據(jù)庫mydb轉(zhuǎn)儲(chǔ)到一個(gè) SQL 腳本文件:

$ pg_dump mydb > db.sql

要用 5 個(gè)并行的工作者任務(wù)轉(zhuǎn)儲(chǔ)一個(gè)數(shù)據(jù)庫到一個(gè)目錄格式的歸檔:

$ pg_dump -Fd mydb -j 5 -f dumpdir

要把一個(gè)歸檔文件重新載入到一個(gè)(新創(chuàng)建的)名為newdb的數(shù)據(jù)庫:

$ pg_restore -d newdb db.dump

要轉(zhuǎn)儲(chǔ)detroit模式中名稱以emp開始的所有表族展,排除名為employee_log的表:

$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql

(四)注意事項(xiàng):

?為maintenance_work_mem和max_wal_size設(shè)置適當(dāng)?shù)模幢日V荡蟮模┲怠?/p>

?如果使用 WAL 歸檔或流復(fù)制,在轉(zhuǎn)儲(chǔ)時(shí)考慮禁用它們拔鹰。在載入轉(zhuǎn)儲(chǔ)之前仪缸,可通過將archive_mode設(shè)置為off、將wal_level設(shè)置為minimal以及將max_wal_senders設(shè)置為零(在錄入dump前)來實(shí)現(xiàn)禁用列肢。 之后恰画,將它們?cè)O(shè)回正確的值并執(zhí)行一次新的基礎(chǔ)備份宾茂。

?如果在數(shù)據(jù)庫服務(wù)器上有多個(gè) CPU 可用,可以考慮使用pg_restore的--jobs選項(xiàng)拴还。這允許并行數(shù)據(jù)載入和索引創(chuàng)建跨晴。?

?恢復(fù)后執(zhí)行統(tǒng)計(jì)信息收集

ANALYZE [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]描述

ANALYZE收集一個(gè)數(shù)據(jù)庫中的表的內(nèi)容的統(tǒng)計(jì)信息,并且將結(jié)果存儲(chǔ)在pg_statistic系統(tǒng)目錄中片林。

三端盆、PG_DUMPALL

pg_dumpall備份一個(gè)給定集簇中的每一個(gè)數(shù)據(jù)庫,并且也保留了集簇范圍的數(shù)據(jù)费封,如角色和表空間定義焕妙。

(一)語法

pg_dumpall > outfile

轉(zhuǎn)儲(chǔ)的結(jié)果可以使用psql恢復(fù):

psql -f infile postgres

(二)注意事項(xiàng)

?PG_DUMPALL的過程中,每個(gè)數(shù)據(jù)庫自身是一致的弓摘,但是不同數(shù)據(jù)庫的快照并不同步焚鹊。

?建議在每個(gè)數(shù)據(jù)庫上運(yùn)行ANALYZE,這樣優(yōu)化器就可以得到有用的統(tǒng)計(jì)信息韧献。你也可以運(yùn)行vacuumdb -a -z來分析所有數(shù)據(jù)庫末患。

四、PITR

在任何時(shí)間势决,PostgreSQL在數(shù)據(jù)集簇目錄的pg_wal/子目錄下都保持有一個(gè)預(yù)寫式日志(WAL)阻塑。這個(gè)日志存在的目的是為了保證崩潰后的安全:如果系統(tǒng)崩潰蓝撇,可以“重放”從最后一次檢查點(diǎn)以來的日志項(xiàng)來恢復(fù)數(shù)據(jù)庫的一致性果复。我們可以把一個(gè)文件系統(tǒng)級(jí)別的備份和WAL文件的備份結(jié)合起來。當(dāng)需要恢復(fù)時(shí)渤昌,我們先恢復(fù)文件系統(tǒng)備份虽抄,然后從備份的WAL文件中重放來把系統(tǒng)帶到一個(gè)當(dāng)前狀態(tài)。

(一)修改配置文件 postgresql.conf

archive_mode = on

archive_command = 'cp -i %p /home/sure/mywork/archive/%f'

wal_level = replica

重啟數(shù)據(jù)庫

./pg_ctl -l logfile start

(二)對(duì)數(shù)據(jù)庫進(jìn)行物理備份

select pg_start_backup('stm');

打包數(shù)據(jù)庫

tar -cvzf data.tar data

結(jié)束備份

select pg_stop_backup();

這時(shí)會(huì)再備份出的data下產(chǎn)生一個(gè)backup_label的文件独柑,記錄了可以查看內(nèi)容有checkpoint時(shí)間,基礎(chǔ)備份的開始和結(jié)束時(shí)間迈窟,以及標(biāo)簽名稱等

這里也可以用pg_basebackup工具備份

pg_basebackup? -F t -R -D /home/postgres/bak

(三)更新數(shù)據(jù)庫

copy? weather from '/home/postgres/test.txt';

切換歸檔產(chǎn)生新歸檔文件

PostgreSQL手動(dòng)切換WAL日志的命令:?

在PG10之前:

highgo=# select pg_switch_xlog(); pg_switch_xlog

在PG10之后:

highgo=# select pg_switch_wal(); pg_switch_wal

(四)模擬數(shù)據(jù)庫毀壞并恢復(fù)

模擬毀壞? cp -r data data1

解壓備份:$ tar xvf data.tar

清理pg_wal? ? rm -rf? ./*

修改 postgresql.conf? 將之前的配置去掉

配置recovery.conf

restore_command = 'cp /home/postgres/archive/%f %p'

archive_cleanup_command='pg_archivecleanup /home/sure/mywork/archivedir %r'

recovery_target_time='2018-07-21 14:35:12'

重啟數(shù)據(jù)庫

Pg_ctl start

結(jié)束后,recovery.conf會(huì)改名變成recovery.done。

驗(yàn)證數(shù)據(jù)

Select? * from weather;

五忌栅、總結(jié):

COPY適合單表或者一個(gè)查詢的結(jié)果车酣,小范圍的移動(dòng)

PG_DUMP適用于數(shù)據(jù)實(shí)時(shí)性要求低,單個(gè)數(shù)據(jù)庫的備份恢復(fù)

PG_DUMPALL適用于數(shù)據(jù)實(shí)時(shí)性要求低索绪,整個(gè)數(shù)據(jù)庫集簇的備份與恢復(fù)

PITR? 適用于數(shù)據(jù)量較大湖员,實(shí)時(shí)性較高的備份和恢復(fù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瑞驱,隨后出現(xiàn)的幾起案子娘摔,更是在濱河造成了極大的恐慌,老刑警劉巖唤反,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凳寺,死亡現(xiàn)場(chǎng)離奇詭異鸭津,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肠缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門逆趋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晒奕,你說我怎么就攤上這事父泳。” “怎么了吴汪?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵惠窄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我漾橙,道長(zhǎng)杆融,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任霜运,我火速辦了婚禮脾歇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淘捡。我一直安慰自己藕各,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布焦除。 她就那樣靜靜地躺著激况,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膘魄。 梳的紋絲不亂的頭發(fā)上乌逐,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音创葡,去河邊找鬼浙踢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灿渴,可吹牛的內(nèi)容都是我干的洛波。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼骚露,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蹬挤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荸百,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤闻伶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后够话,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓝翰,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡光绕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畜份。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诞帐。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爆雹,靈堂內(nèi)的尸體忽然破棺而出停蕉,到底是詐尸還是另有隱情,我是刑警寧澤钙态,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布慧起,位于F島的核電站,受9級(jí)特大地震影響册倒,放射性物質(zhì)發(fā)生泄漏蚓挤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一驻子、第九天 我趴在偏房一處隱蔽的房頂上張望灿意。 院中可真熱鬧,春花似錦崇呵、人聲如沸缤剧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荒辕。三九已至,卻和暖如春芒粹,著一層夾襖步出監(jiān)牢的瞬間兄纺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工化漆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钦奋。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓座云,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親付材。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朦拖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • | | 備份速度|備份范圍|恢復(fù)范圍|操作影響|備份原理|恢復(fù)成本|| ------- |:---...
    頂兒響叮當(dāng)閱讀 3,393評(píng)論 0 4
  • <<編程基礎(chǔ)-語言SQL.Git.Docker>>SQL.PLSQLhttp://docs.pythontab.c...
    燕京博士閱讀 440評(píng)論 0 0
  • pg_ctl 名稱 pg_ctl -- 啟動(dòng)、停止厌衔、重啟 PostgreSQL語法 pg_ctl start [-...
    老肖閱讀 969評(píng)論 0 0
  • Standby數(shù)據(jù)庫原理 簡(jiǎn)單介紹一些基礎(chǔ)概念與原理璧帝,首先我們做主從同步的目的就是實(shí)現(xiàn)db服務(wù)的高可用性,通常是一...
    櫝夜閱讀 3,235評(píng)論 0 5
  • 在我的努力下苏潜,我終于招到一個(gè)還算是比較認(rèn)可的一個(gè)人啦银萍。 每次做完一件事情,總是在反思自己恤左,我這樣做對(duì)嗎贴唇?!我為什么...
    SU吶閱讀 99評(píng)論 0 0