<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                最近遇到這樣一個需求:在做時間點恢復時,需要從主庫獲取最近生成的那些xlog文件(需要獲取的xlog文件名是已知的)。怎么辦?一個想法是,利用scp等工具,直接從主庫下載,這要求我們處理整個下載過程,比較麻煩。其實PG已經為我們準備了一個xlog傳輸工具——pg_receivexlog。這個工具可能很多人都沒注意到,而且官方文檔中介紹的很少。在這里我們為大家解析一下這個工具。 ## 能做什么 pg_receivexlog能為我們做什么呢?它能夠從一個PG服務器,獲取你想要的那些xlog日志文件。初步研究后,我們可以得到以下信息: 1. 它以類似流式復制(streaming replication)的方式,獲取主庫的xlog文件。這意味著你要以超級用戶或有replication權限的用戶,連接PG進行日志傳輸,且要在pg_hba.conf里面,對其做權限配置。在連接建立后,PG服務器會有一個獨立的WAL sender進程,負責xlog的傳輸,所以`max_wal_senders`要至少為1,使我們能獲得一個WAL sender。 2. 它不會等待一個xlog文件寫完后才開始傳輸。也就是說,正在被寫的xlog文件,也會進行傳輸,因此可以通過這個工具實時獲取最新的xlog內容。 3. 可以使用replication 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既是一個很實用的工具,也是一個可以用于更多場景的讓人充滿想象的利器。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看