濮阳杆衣贸易有限公司

主頁 > 知識庫 > 使用pg_basebackup對Postgre進行備份與恢復(fù)的實現(xiàn)

使用pg_basebackup對Postgre進行備份與恢復(fù)的實現(xiàn)

熱門標(biāo)簽:地圖標(biāo)注要花多少錢 電銷機器人能補救房產(chǎn)中介嗎 400電話申請客服 天津開發(fā)區(qū)地圖標(biāo)注app 濟南外呼網(wǎng)絡(luò)電話線路 電話機器人怎么換人工座席 移動外呼系統(tǒng)模擬題 江蘇400電話辦理官方 廣州電銷機器人公司招聘

postgres 版本9.4.23

暫時在Windows下對postgres進行備份恢復(fù)。

在進行備份之前,在認證文件中增加一行,否則無法進行備份

host  replication   postgres    127.0.0.1/24      md5

開始使用pg_basebackup命令進行備份。當(dāng)pgbak文件夾不存在的時候,備份的過程中會自動創(chuàng)建該文件夾。

關(guān)于pg_basebackup的命令,可以參考文檔

C:\PostgreSQL\9.4\bin>pg_basebackup -h 127.0.0.1 -U postgres -D C:\pgbak -Ft -R -z -v --checkpoint=fast
口令:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
已復(fù)制     1 個文件。
已復(fù)制     1 個文件。
已復(fù)制     1 個文件。
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_basebackup: base backup completed

進行模擬破壞。停掉庫。 刪除掉data目錄(注意wal日志以.backup結(jié)尾及以后的文件不要刪除,因為這些文件沒有備份,恢復(fù)的時候要使用)。把備份好的tar.gz文件解壓到data。

在恢復(fù)之前,修改加壓后的tar.gz里面的recovery.conf文件(其實是指定歸檔的位置,這樣就會進行恢復(fù))。否則無法啟動數(shù)據(jù)庫。修改后的內(nèi)容如下(#屏蔽掉了備份生成的命令):

#standby_mode = 'on'
#primary_conninfo = 'user=postgres password=postgres host=127.0.0.1 port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
 
restore_command = 'C:\\PostgreSQL\\9.4\\data\\pg_xlog\\archive_status\\%f' 

啟動postgres數(shù)據(jù)庫

C:\PostgreSQL\9.4\bin>pg_ctl start -D C:\PostgreSQL\9.4\data
正在啟動服務(wù)器進程
 
C:\PostgreSQL\9.4\bin>2019-08-06 21:22:29 HKT 日志: 日志輸出重定向到日志收集進
程
2019-08-06 21:22:29 HKT 提示: 后續(xù)的日志輸出將出現(xiàn)在目錄 "pg_log"中.
已復(fù)制     1 個文件。
已復(fù)制     1 個文件。
C:\PostgreSQL\9.4\bin>

這樣數(shù)據(jù)庫就起來了?;謴?fù)正常。

下面是恢復(fù)后的wal日志文件情況。

恢復(fù)的時候,碰到的一些問題

問題1 。這個原因,是因為在recovery.conf中沒有指定restore_command。是按照replicate來進行復(fù)制了。所以出錯。

2019-08-06 21:20:25 HKT LOG: database system was shut down in recovery at 2019-08-06 21:15:46 HKT
2019-08-06 21:20:25 HKT LOG: could not open tablespace directory "pg_tblspc/16419/PG_9.4_201409291": No such file or directory
2019-08-06 21:20:25 HKT LOG: could not open tablespace directory "pg_tblspc/16577/PG_9.4_201409291": No such file or directory
2019-08-06 21:20:25 HKT LOG: starting archive recovery
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D6' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
2019-08-06 21:20:25 HKT LOG: invalid checkpoint record
2019-08-06 21:20:25 HKT FATAL: could not locate required checkpoint record
2019-08-06 21:20:25 HKT HINT: If you are not restoring from a backup, try removing the file "C:/PostgreSQL/9.4/data/backup_label".
2019-08-06 21:20:25 HKT 日志: 啟動進程 (PID 544) 已退出, 退出代碼 1
2019-08-06 21:20:25 HKT 日志: 由于啟動進程失敗, 終止啟動

問題2,這樣原因,是因為在恢復(fù)的時候,tar.gz文件夾里面,包含有自己建立的表空間。而在模擬故障的是時候,表空間沒有被刪除,也就是說,沒有使用tar.gz里面的表空間文件覆蓋原來的表空間。覆蓋后OK。

2019-08-06 21:22:29 HKT LOG: database system was shut down in recovery at 2019-08-06 21:15:46 HKT
2019-08-06 21:22:29 HKT LOG: could not open tablespace directory "pg_tblspc/16419/PG_9.4_201409291": No such file or directory
2019-08-06 21:22:29 HKT LOG: could not open tablespace directory "pg_tblspc/16577/PG_9.4_201409291": No such file or directory
2019-08-06 21:22:29 HKT LOG: starting archive recovery
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D6' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
2019-08-06 21:22:29 HKT LOG: redo starts at 0/D6000090
2019-08-06 21:22:29 HKT LOG: consistent recovery state reached at 0/D60000B8
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D7' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
2019-08-06 21:22:29 HKT LOG: record with zero length at 0/D7000090
2019-08-06 21:22:29 HKT LOG: redo done at 0/D7000028
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\0000000100000000000000D7' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\00000002.history' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
2019-08-06 21:22:29 HKT LOG: selected new timeline ID: 2
'C:\PostgreSQL\9.4\data\pg_xlog\archive_status\00000001.history' 不是內(nèi)部或外部命令,也不是可運行的程序
或批處理文件。
2019-08-06 21:22:29 HKT FATAL: the database system is starting up
2019-08-06 21:22:29 HKT LOG: archive recovery complete
2019-08-06 21:22:29 HKT LOG: MultiXact member wraparound protections are now enabled
2019-08-06 21:22:29 HKT 日志: 數(shù)據(jù)庫系統(tǒng)準備接受連接
2019-08-06 21:22:29 HKT LOG: autovacuum launcher started
2019-08-06 21:22:30 HKT LOG: statement: SET DateStyle=ISO; SET client_min_messages=notice; SELECT set_config('bytea_output','escape',false) FROM pg_settings WHERE name = 'bytea_output'; SET client_encoding='UNICODE';
2019-08-06 21:22:30 HKT LOG: statement: 
	SELECT
	  db.oid as did, db.datname, db.datallowconn,
	  pg_encoding_to_char(db.encoding) AS serverencoding,
	  has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid
	FROM
	  pg_database db
	WHERE db.datname = current_database()
2019-08-06 21:22:30 HKT LOG: statement: 
	SELECT
	  oid as id, rolname as name, rolsuper as is_superuser,
	  rolcreaterole as can_create_role, rolcreatedb as can_create_db
	FROM
	  pg_catalog.pg_roles
	WHERE
	  rolname = current_user
2019-08-06 21:22:30 HKT LOG: statement: /*pga4dash*/

補充:pgsql的pg_basebackup

pg_basebackup:是從pgsql提供的一個方便基礎(chǔ)備份的工具。經(jīng)常用來搭建流復(fù)制環(huán)境

屬于物理備份。pgsql的邏輯備份是pg_dump工具。

參數(shù)說明(pg_basebackup --help 詳細查看):

-h 指定連接的數(shù)據(jù)庫的主機名或IP地址,這里就是主庫的ip。

-U 指定連接的用戶名,專門負責(zé)流復(fù)制的repl用戶。

-F 指定了輸出的格式,支持p(原樣輸出)或者t(tar格式輸出)。

-x 表示備份開始后,啟動另一個流復(fù)制連接從主庫接收WAL日志。

-P 表示允許在備份過程中實時的打印備份的進度。

-R 表示會在備份結(jié)束后自動生成recovery.conf文件,這樣也就避免了手動創(chuàng)建。(12.0有差異)

-D 指定把備份寫到哪個目錄,這里尤其要注意一點就是做基礎(chǔ)備份之前從庫的數(shù)據(jù)目錄(比如:/usr/local/postgresql/data)目錄需要手動清空。

-l 表示指定一個備份的標(biāo)識

如:pg_basebackup -h 192.168.23.193 -p 3012 -U testacc -F p -P -X s -R -D /data -r 50M -l label_1576225683"

注意:

12 版本pg_basebackup 命令的 -R 參數(shù)的效果和之前不同,主要體現(xiàn)在:

命令執(zhí)行后在 $PGDATA 目錄創(chuàng)建 standby.signal 標(biāo)識文件,文件內(nèi)容為空

命令執(zhí)行后在 $PGDATA 目錄的 postgresql.auto.conf 文件中添加 primary_conninfo 參數(shù)信息

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL之pgdump備份恢復(fù)操作
  • postgresql 如何查看pg_wal目錄下xlog文件總大小
  • postgresql之使用lsn 獲取 wal文件名的實例
  • 修改postgresql存儲目錄的操作方式
  • postgresql運維之遠程遷移操作
  • postgreSQL自動生成隨機數(shù)值的實例

標(biāo)簽:濮陽 榆林 辛集 杭州 昭通 寶雞 海西 溫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用pg_basebackup對Postgre進行備份與恢復(fù)的實現(xiàn)》,本文關(guān)鍵詞  使用,basebackup,對,Postgre,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用pg_basebackup對Postgre進行備份與恢復(fù)的實現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用pg_basebackup對Postgre進行備份與恢復(fù)的實現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    宜州市| 霍林郭勒市| 青龙| 静宁县| 宿州市| 青田县| 无棣县| 连云港市| 宁武县| 修文县| 江津市| 高州市| 墨玉县| 榆中县| 蓬安县| 确山县| 双柏县| 饶阳县| 如东县| 黄山市| 清水县| 仙桃市| 军事| 仲巴县| 荣成市| 常德市| 阳江市| 孟连| 马山县| 广河县| 镇安县| 文山县| 临澧县| 宁阳县| 金华市| 凉城县| 双桥区| 承德市| 铜鼓县| 亚东县| 松阳县|