婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > PostgreSQL時(shí)間線(timeline)和History File的用法

PostgreSQL時(shí)間線(timeline)和History File的用法

熱門標(biāo)簽:重慶自動(dòng)外呼系統(tǒng)定制 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 外呼調(diào)研系統(tǒng) 打電話智能電銷機(jī)器人授權(quán) 美容工作室地圖標(biāo)注 地圖標(biāo)注和圖片名稱的區(qū)別 漯河外呼電話系統(tǒng) 海豐有多少商家沒有地圖標(biāo)注 辦公外呼電話系統(tǒng)

說明:

在pg中,當(dāng)我們進(jìn)行了基于時(shí)間點(diǎn)的還原(PITR)后,數(shù)據(jù)庫(kù)會(huì)啟用新的時(shí)間線并繼續(xù)進(jìn)行操作。

但是,當(dāng)我們進(jìn)行基于時(shí)間點(diǎn)的還原后如果發(fā)現(xiàn)又出現(xiàn)錯(cuò)誤,想要繼續(xù)還原數(shù)據(jù)庫(kù)該如何操作呢?如何還原到原先舊的時(shí)間線呢?

我們可以使用recovery_target_timeline參數(shù)來指定數(shù)據(jù)庫(kù)還原到某一個(gè)時(shí)間線上。如果你還不清楚這個(gè)參數(shù)該如何使用,或者說壓根不知道時(shí)間線是啥,那么請(qǐng)繼續(xù)往下看。

PostgreSQL 時(shí)間線:

每當(dāng)我們?cè)跀?shù)據(jù)庫(kù)中完成一個(gè)事務(wù)時(shí),所做的操作都會(huì)記錄到$PGDATA/pg_wal目錄下的wal日志文件中。

wal日志文件一般都是下面這種格式:

000000010000000000000001

當(dāng)一個(gè)wal日志被寫滿后,便會(huì)創(chuàng)建新的wal日志000000010000000000000002,以此類推。

該文件中前8位,即:00000001表示的便是數(shù)據(jù)庫(kù)的時(shí)間線。

從控制文件中也可以看到:

-bash-4.1$-> pg_controldata |grep TimeLineID
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1

每當(dāng)我們進(jìn)行基于時(shí)間點(diǎn)的還原后,時(shí)間線便會(huì)加1,并創(chuàng)建一個(gè)名為NewTimelineID.history的新文件。這個(gè)文件是干什么用的我們后面會(huì)介紹。

recovery_target_timeline是一個(gè)參數(shù),它可以幫助我們將集群帶入歷史記錄中的任何時(shí)間線,只要有效的基本備份和所有存檔日志都到位。

我們來看看下面的例子:

首先,重新初始化一個(gè)新的數(shù)據(jù)庫(kù)集群。

-bash-4.1$-> ls pg_wal
000000010000000000000001 archive_status

然后創(chuàng)建一張表并插入數(shù)據(jù)。

bill=# create table timeline(tid int, remarks varchar(1000));
CREATE TABLE
bill=# insert into timeline values('1','This is timeline id 1');
INSERT 0 1
bill=# checkpoint;
CHECKPOINT
bill=# select pg_switch_wal();
pg_switch_wal
---------------
0/15D4B70
(1 row)

剛剛插入的數(shù)據(jù)便記錄在000000010000000000000001的wal日志中。

當(dāng)wal日志寫到000000010000000000000005時(shí),進(jìn)行一次完整的備份,接著再產(chǎn)生一些新的wal日志。

-bash-4.1$ ls -rlt
total 147460
-rw------- 1 postgres postgres 16777216 Nov 22 13:03 000000010000000000000001
-rw------- 1 postgres postgres 16777216 Nov 22 13:03 000000010000000000000002
-rw------- 1 postgres postgres 16777216 Nov 22 13:03 000000010000000000000003
-rw------- 1 postgres postgres 16777216 Nov 22 13:05 000000010000000000000004
-rw------- 1 postgres postgres 16777216 Nov 22 13:05 000000010000000000000005
-rw------- 1 postgres postgres 337 Nov 22 13:05 000000010000000000000005.00000028.backup
-rw------- 1 postgres postgres 16777216 Nov 22 13:06 000000010000000000000006
-rw------- 1 postgres postgres 16777216 Nov 22 13:06 000000010000000000000007

可以看到,現(xiàn)在最新的wal日志是000000010000000000000008

接著插入一條新的數(shù)據(jù)。

bill=# insert into timeline values('1','This is timeline id 1 after basebackup');
INSERT 0 1
bill=# checkpoint;
CHECKPOINT
-bash-4.1$ pg_waldump 000000010000000000000008 | grep INSERT
rmgr: Heap len (rec/tot): 54/ 214, tx:
487, lsn: 0/08000110, prev 0/080000D8, desc: INSERT off 2 flags 0x00,
blkref #0: rel 1663/13530/16384 blk 0 FPW

然后再產(chǎn)生幾個(gè)wal日志,現(xiàn)在的情況如下:

-bash-4.1$ ls -rlt
total 311308
-rw------- 1 16777216 Nov 22 13:03 000000010000000000000001
-rw------- 1 16777216 Nov 22 13:03 000000010000000000000002
-rw------- 1 16777216 Nov 22 13:03 000000010000000000000003
-rw------- 1 16777216 Nov 22 13:05 000000010000000000000004
-rw------- 1 16777216 Nov 22 13:05 000000010000000000000005
-rw------- 1 337 Nov 22 13:05 000000010000000000000005.00000028.backup
-rw------- 1 16777216 Nov 22 13:06 000000010000000000000006
-rw------- 1 16777216 Nov 22 13:06 000000010000000000000007
-rw------- 1 16777216 Nov 22 13:07 000000010000000000000008
-rw------- 1 16777216 Nov 22 13:07 000000010000000000000009
-rw------- 1 16777216 Nov 22 13:09 00000001000000000000000A

如下圖所示:

此時(shí),在我插入第二條數(shù)據(jù)前,我想要把數(shù)據(jù)還原到000000010000000000000007這個(gè)點(diǎn)。

因此我在postgresql.conf文件中將恢復(fù)目標(biāo)lsn設(shè)置為“ 0/07000060”。

接著進(jìn)行還原,當(dāng)我們還原之后,數(shù)據(jù)庫(kù)切換到了新的時(shí)間線。

除此之外還有哪些改變呢?

恢復(fù)結(jié)束是指數(shù)據(jù)庫(kù)打開進(jìn)行寫入的點(diǎn)。

創(chuàng)建了新的時(shí)間線的 history file文件,如00000002.history。

前一個(gè)時(shí)間線上的部分WAL文件已被新時(shí)間線的ID復(fù)制。

檢查點(diǎn)記錄寫在新的時(shí)間線上。

日志中會(huì)記錄下列信息:

LOG: starting point-in-time recovery to WAL location (LSN) "0/7000060"
LOG: restored log file "000000010000000000000005" from archive
LOG: redo starts at 0/5000028
LOG: consistent recovery state reached at 0/5000138
LOG: database system is ready to accept read only connections
LOG: restored log file "000000010000000000000006" from archive
LOG: restored log file "000000010000000000000007" from archive
LOG: recovery stopping after WAL location (LSN) "0/7000060"
LOG: pausing at the end of recovery
HINT: Execute pg_wal_replay_resume() to promote.

此時(shí),PostgreSQL已在wal日志7處分支到新的時(shí)間線,并開始創(chuàng)建時(shí)間線ID為2的新wal日志。我們可以下wal日志目錄下看到00000002.history文件。

該文件是可讀文件,內(nèi)容大致為:

1parentTLI> 0/70000D8 switchpoint> after LSN 0/7000060reason>
parentTLI  ID of the parent timeline
switchpoint XLogRecPtr of the WAL location where the switch happened
reason  human-readable explanation of why the timeline was changed

接下來,我向wal日志00000002000000000000000A (0/A000060)中插入新的數(shù)據(jù)。

bill=# insert into timeline values('2','This is timeline id 2 correct');
INSERT 0 1

以及另一個(gè)wal日志00000002000000000000000D(0/D000000)中插入另一條數(shù)據(jù)。

bill=# insert into timeline values('2','This is timeline id 2 wrong at 0/D000000');
INSERT 0 1

這個(gè)時(shí)候,我在00000002000000000000000D的wal日志中執(zhí)行了錯(cuò)誤的操作,想要回退到時(shí)間線2的00000002000000000000000C處,那么我要如何操作呢,如果像前面一樣只指定lsn那么怎么保證不會(huì)回退到時(shí)間線1中呢?

這個(gè)時(shí)候我們便可以通過指定recovery_target_timeline來實(shí)現(xiàn)。

在postgresql.conf文件中添加:

recovery_target_timeline = '2'
recovery_target_lsn = '0/0C000060'

接著,啟動(dòng)數(shù)據(jù)庫(kù),可以看到日志中:

LOG: database system was interrupted; last known up at 2020-11-22 13:05:01 IST
LOG: restored log file "span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">00000002.history/span>" from archive
cp: cannot stat `/u02/archivelogs/00000003.history': No such file or directory
LOG: starting point-in-time recovery to WAL location (LSN) "0/C000060"
LOG: restored log file "00000002.history" from archive
LOG: restored log file "span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">000000010000000000000005/span>" from archive
LOG: redo starts at 0/5000028
LOG: consistent recovery state reached at 0/5000138
LOG: database system is ready to accept read only connections
LOG: restored log file "000000010000000000000006" from archive
LOG: restored log file "000000020000000000000007" from archive
LOG: restored log file "000000020000000000000008" from archive
LOG: restored log file "000000020000000000000009" from archive
LOG: restored log file "00000002000000000000000A" from archive
LOG: restored log file "00000002000000000000000B" from archive
LOG: restored log file "span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">00000002000000000000000C/span>" from archive
LOG: recovery stopping after WAL location (LSN) "span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">0/C000060/span>"
LOG: pausing at the end of recovery
HINT: Execute pg_wal_replay_resume() to promote.
..
LOG: redo done at 0/C000060
LOG: last completed transaction was at log time 2020-11-22 13:15:29.696929+05:30

然后查詢?cè)摫眚?yàn)證:

bill=# select * from timeline;
 tid | remarks
-----+-------------------------------
 1 | This is timeline id 1
 2 | This is timeline id 2 correct
(2 rows)

此時(shí)可以看到新建了00000003.history文件,該文件內(nèi)容如下:

-bash-4.1$ cat 00000003.history
1 0/70000D8 after LSN 0/7000060
2 0/C0000D8 after LSN 0/C000060

我們不難發(fā)現(xiàn):

history file這個(gè)文件中記錄的就是這個(gè)時(shí)間線是從哪個(gè)WAL位置開始生成的。

補(bǔ)充:PostgreSQL promote過程 和 一主多備 時(shí)間線 無縫對(duì)接 詳解

PostgreSQL的physical standby數(shù)據(jù)庫(kù)的promote過程,數(shù)據(jù)庫(kù)會(huì)在pg_xlog目錄產(chǎn)生3個(gè)文件。

例如將備庫(kù)1 promote,它將在pg_xlog目錄產(chǎn)生如下文件:

A.partial (xlog) 
NEWTL_A (xlog)
NEWTL.history (history file)

例如備庫(kù)1當(dāng)前已接收到的XLOG位置是 00000001000000000000002D 文件中的某個(gè)位置 0/2D15D7D0,現(xiàn)在promote它 。

將會(huì)在pg_xlog目錄中產(chǎn)生3個(gè)文件:

00000001000000000000002D.partial
00000002000000000000002D 
 (00000001000000000000002D.partial 的內(nèi)容會(huì)拷貝到 00000002000000000000002D)
00000002.history
  1 0/2D15D7D0 no recovery target specified

假設(shè)還有一個(gè)備庫(kù)叫備庫(kù)2,備庫(kù)2如何能順利的對(duì)接到已激活的備庫(kù)1呢?

有個(gè)前提條件

備庫(kù)2在TL1這條時(shí)間線上,還沒有接收到00000001000000000000002D 這個(gè)文件。

把00000002.history拷貝到備庫(kù)2的pg_xlog。

備庫(kù)2會(huì)在應(yīng)用完00000001000000000000002C后請(qǐng)求下一個(gè)時(shí)間線的 00000002000000000000002D 文件。

這樣就能完美對(duì)接。

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

您可能感興趣的文章:
  • postgresql 13.1 insert into select并行查詢的實(shí)現(xiàn)
  • PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重
  • postgresql insert into select無法使用并行查詢的解決
  • 啟動(dòng)PostgreSQL服務(wù)器 并用pgAdmin連接操作
  • SpringBoot連接使用PostgreSql數(shù)據(jù)庫(kù)的方法
  • PostgreSQL的upsert實(shí)例操作(insert on conflict do)
  • postgresql合并string_agg函數(shù)的實(shí)例
  • postgresql 數(shù)據(jù)庫(kù) 與TimescaleDB 時(shí)序庫(kù) join 在一起
  • PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案

標(biāo)簽:株洲 蚌埠 珠海 來賓 衡陽(yáng) 錦州 晉城 烏海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL時(shí)間線(timeline)和History File的用法》,本文關(guān)鍵詞  PostgreSQL,時(shí)間,線,timeline,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL時(shí)間線(timeline)和History File的用法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PostgreSQL時(shí)間線(timeline)和History File的用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一色桃子久久精品亚洲| 国产欧美精品一区| 精品人伦一区二区色婷婷| 亚洲欧美偷拍卡通变态| 成人一区在线观看| 亚洲色图19p| 91麻豆精品91久久久久久清纯| 韩国三级中文字幕hd久久精品| 久久久久综合网| 亚洲天堂福利av| 欧美一区中文字幕| 粉嫩av亚洲一区二区图片| 国产欧美一区二区三区网站 | 北岛玲一区二区三区四区| 日本午夜一本久久久综合| 久久久久久久综合狠狠综合| 69精品人人人人| 欧洲精品在线观看| 色综合久久中文综合久久97 | 国产激情一区二区三区| 日本美女视频一区二区| 亚洲一区国产视频| 一区二区三区在线观看动漫| 亚洲一区二区三区中文字幕在线| 亚洲美女在线一区| 一区二区免费在线| 午夜精品福利在线| 全部av―极品视觉盛宴亚洲| 麻豆91免费观看| 久久成人av少妇免费| 欧美国产激情二区三区 | 欧美一区二区视频观看视频| 99国产欧美久久久精品| 亚洲午夜久久久久久久久电影院| 国产精品女同互慰在线看| 成人性生交大片免费看中文| 93久久精品日日躁夜夜躁欧美| 欧美高清www午色夜在线视频| 国产剧情一区二区| 日韩午夜在线播放| 三级久久三级久久| 欧美视频日韩视频在线观看| 亚洲人亚洲人成电影网站色| 国产乱码精品1区2区3区| 色久综合一二码| 国产精品久久综合| 毛片av一区二区| 99国产麻豆精品| 国产精品一区二区久激情瑜伽 | 亚洲影院免费观看| 成人av在线看| 亚洲天堂av一区| 不卡的看片网站| 中文在线一区二区| 亚洲超碰精品一区二区| 欧美午夜精品电影| 国产一区二区福利视频| 亚洲色大成网站www久久九九| 欧美在线啊v一区| 日韩av二区在线播放| 亚洲综合久久久| 欧美一二区视频| √…a在线天堂一区| 亚洲激情中文1区| 欧美三级蜜桃2在线观看| 亚洲午夜免费视频| 欧美精品一区二区三区在线| 国产一区二区三区综合| 亚洲免费观看高清在线观看| 色久优优欧美色久优优| 丰满岳乱妇一区二区三区| 国产乱码精品一品二品| 99这里只有精品| 日韩精品亚洲专区| 精品理论电影在线| 久久99久久99小草精品免视看| 色8久久人人97超碰香蕉987| 奇米亚洲午夜久久精品| 国产人成一区二区三区影院| 国产在线视频一区二区三区| 日韩精品一区二区三区蜜臀 | 国产激情91久久精品导航| 午夜久久久久久久久久一区二区| 天天综合色天天| 国产一区在线精品| 欧美制服丝袜第一页| 欧美美女bb生活片| 日韩丝袜美女视频| 欧美精品一区二区三区在线| 日韩欧美在线一区二区三区| 一本色道久久综合亚洲精品按摩| 国产超碰在线一区| 懂色av一区二区三区免费看| 国产精品一区二区在线观看网站 | 91精品国产综合久久久久久| 国产成人综合亚洲91猫咪| 免费在线观看精品| 亚洲一二三区在线观看| 亚洲女同ⅹxx女同tv| 久久无码av三级| 欧美成人三级在线| 国产欧美精品日韩区二区麻豆天美| 国产午夜精品一区二区三区嫩草| 国产精品网友自拍| 亚洲成av人片www| 成人精品小蝌蚪| 欧美在线不卡视频| www国产成人免费观看视频 深夜成人网| 精品一区二区影视| 精品在线你懂的| 国产精品久久久久久久岛一牛影视| 日本三级韩国三级欧美三级| 日韩视频免费直播| 久久不见久久见免费视频1| 亚洲综合在线五月| 国产一区二区久久| 精品对白一区国产伦| 蜜臀av亚洲一区中文字幕| 欧美日韩午夜在线视频| 亚洲成a人片在线观看中文| 91社区在线播放| 亚洲天堂av一区| 91免费版在线| 亚洲第一搞黄网站| 色婷婷国产精品| 日本视频一区二区| 日韩一二在线观看| 久久成人av少妇免费| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 波多野结衣亚洲| 男男视频亚洲欧美| 亚洲一区二区视频在线观看| 中文字幕中文在线不卡住| 精品少妇一区二区三区 | 国产精品国产三级国产普通话三级| 91成人免费在线| 国产成人精品www牛牛影视| 午夜视频在线观看一区二区三区| 综合亚洲深深色噜噜狠狠网站| 国产亚洲精品久| 9i在线看片成人免费| 婷婷中文字幕综合| 中文字幕在线不卡一区| 91精品国产91热久久久做人人 | 日韩免费观看高清完整版| 91视频免费看| 成人福利视频网站| 免费av网站大全久久| 亚洲欧洲99久久| 久久久亚洲精华液精华液精华液| 欧美视频一区二区三区四区| 亚洲丝袜自拍清纯另类| 国产精品视频第一区| 日韩成人一区二区| 日韩一区二区三区四区五区六区| 91老司机福利 在线| 欧美日本一道本| 久久久噜噜噜久噜久久综合| 久久综合色8888| 亚洲婷婷国产精品电影人久久| eeuss鲁片一区二区三区在线看| 五月天精品一区二区三区| 成人欧美一区二区三区白人| 欧美午夜免费电影| 欧美日韩一级片网站| 欧美亚日韩国产aⅴ精品中极品| 99精品视频在线播放观看| 成人黄色在线网站| 成人午夜免费电影| 成人国产在线观看| 成人精品一区二区三区四区| 成人小视频在线| 欧美日韩一区二区三区在线| 欧美丝袜自拍制服另类| 欧美久久免费观看| www久久精品| 一区二区三区四区高清精品免费观看 | 精品欧美乱码久久久久久| 精品sm捆绑视频| 国产精品你懂的| 亚洲欧美激情一区二区| 免费看日韩a级影片| 高清成人免费视频| 欧美体内she精视频| 久久久91精品国产一区二区精品| 中文字幕制服丝袜一区二区三区| 亚洲在线视频一区| 国产麻豆一精品一av一免费 | 精品亚洲欧美一区| 99re这里只有精品首页| 精品日韩一区二区三区| 综合激情网...| 丁香啪啪综合成人亚洲小说| 欧美一区日韩一区| 亚洲欧美一区二区不卡| 免费成人深夜小野草| 欧美撒尿777hd撒尿| 国产精品视频一二三| 国产乱码精品1区2区3区| 欧美日韩一区二区在线观看视频 |