国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

PgSQL · 特性分析 · pg_receivexlog工具解析

2024-07-21 02:51:36
字體:
來源:轉載
供稿:網友

最近遇到這樣一個需求:在做時間點恢復時,需要從主庫獲取最近生成的那些xlog文件(需要獲取的xlog文件名是已知的)。怎么辦?一個想法是,利用scp等工具,直接從主庫下載,這要求我們處理整個下載過程,比較麻煩。其實PG已經為我們準備了一個xlog傳輸工具——pg_receivexlog。這個工具可能很多人都沒注意到,而且官方文檔中介紹的很少。在這里我們為大家解析一下這個工具。

能做什么

pg_receivexlog能為我們做什么呢?它能夠從一個PG服務器,獲取你想要的那些xlog日志文件。初步研究后,我們可以得到以下信息:

它以類似流式復制(streaming replication)的方式,獲取主庫的xlog文件。這意味著你要以超級用戶或有replication權限的用戶,連接PG進行日志傳輸,且要在pg_hba.conf里面,對其做權限配置。在連接建立后,PG服務器會有一個獨立的WAL sender進程,負責xlog的傳輸,所以max_wal_senders要至少為1,使我們能獲得一個WAL sender。它不會等待一個xlog文件寫完后才開始傳輸。也就是說,正在被寫的xlog文件,也會進行傳輸,因此可以通過這個工具實時獲取最新的xlog內容??梢允褂胷eplication slot,通過同步replication slot的方式進行日志傳輸。這樣做的好處是,主庫在xlog傳輸完成前不會刪除xlog文件。不過可能的風險是,如果日志沒有利用slot成功傳輸,可能導致日志堆積在PG里面,最終把磁盤占滿。

如何啟動

PG安裝后的bin目錄里面,一般包含了pg_receivexlog這個工具。可以使用下面的方式啟動它:

pg_receivexlog -h <host name> -p <port> -U <user> -W <passWord> -D <local dir to store xlog files>

其中,-h -p -U -W 選項指定要連接的PG的主機名、端口、用戶、密碼,-D 選項指定本地的一個目錄,用于存儲下載的xlog文件。另外缺省情況下,如果連接無法建立,或傳輸過程中連接意外斷開,pg_receivexlog會進行重試,如果不想重試,可以指定-n選項。

有個問題是,如何指定要傳輸哪些xlog文件?先來看看pg_receivexlog如何確定從哪個xlog文件開始傳輸的。從src/bin/pg_basebackup/pg_receivexlog.c 的FindStreamingStart函數可以看出,pg_receivexlog會掃描整個-D選項指定的目錄,將掃描到的每個文件名,去掉其timeline部分,轉換為64為整數。選取其中對應整數最大的文件,按如下方式選擇開始下載的文件:如果這個文件是以.partial為后綴的,則重新下載此文件和后續文件;如果該文件不帶.partial后綴,是一個完整的日志文件,則從此文件的下一個文件(文件名加1)開始下載。如果我們需要從00000001000000000000001B到00000001000000000000001D的幾個文件,則只需要在-D指定的目錄里面執行:

touch 00000001000000000000001B.partial

保證此目錄沒有其他文件,然后按上面列出的方式啟動pg_receivexlog即可,pg_receivexlog會重新下載00000001000000000000001B和后續文件。

如何停止

如何停止pg_receivexlog的執行呢?pg_receivexlog已經下載了我們需要的文件后,并不會自動停止,我們也沒有辦法指定它下載到哪個文件結束。唯一的辦法是通過Ctl-C命令向它發送SIGINT信號來結束它。類似的,可以直接向它的進程發生kill命令:

kill -SIGINT <pg_receivexlog pid>

注意,pg_receivexlog只在成功傳輸完一個xlog文件后,才檢查是否收到了SIGINT信號,因此你只可能在一個文件接收完成后正常結束pg_receivexlog運行。其實更暴力的辦法是直接kill -9 也是可以的。

從上面的分析可以看出,pg_receivexlog這個工具還是比較簡單易用的。除了傳輸xlog日志,可以利用它做一個日志服務器,用來存儲歸檔的日志;還可以做為一主多備方案。由此可見,pg_receivexlog既是一個很實用的工具,也是一個可以用于更多場景的讓人充滿想象的利器。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邯郸县| 江油市| 梓潼县| 海林市| 阿瓦提县| 东乌珠穆沁旗| 铜梁县| 全南县| 巴塘县| 怀化市| 石台县| 灵台县| 阳曲县| 许昌市| 揭阳市| 会东县| 崇州市| 宜城市| 孟连| 宜昌市| 潮安县| 高尔夫| 崇左市| 衢州市| 庄浪县| 汨罗市| 平顺县| 襄樊市| 攀枝花市| 云浮市| 吉木乃县| 仙游县| 咸宁市| 醴陵市| 嘉鱼县| 武邑县| 含山县| 东源县| 西宁市| 黎城县| 乐东|