2016-02-28 57 views
0

我試圖找到一個最快的方式將postgresql 數據庫v9.1.20從一臺服務器移動到另一臺服務器 與postgres v9.3.10。Postgresql就地數據庫升級

方案如下:

生產服務器上運行Ubuntu 12.04 的PostgreSQL 9.1.20,數據庫大小appox250克

目標服務器,我們正試圖重新定位上是 的Ubuntu 14.04 postgresq 9.3.10。

我們正在試圖與 嘗試的第一個嘗試是從舊服務器轉儲數據庫(pg_dump)和新服務器(pg_restore)上還原 它。

它工作得很好,但我們花了 搬遷時間大約爲4小時(pg_dump需要3個小時 和pg_restore的需要1個小時(網絡鏈接1G, SSD磁盤兩臺服務器上)。

總停機時間在4小時內是不能接受的。

下一次嘗試是使用pg_basebackup代替 pg_dump,該方法減少了備用時間可達40分鐘 代替3-小時,這是可以接受的。

但是由於版本不兼容,我們無法使用由pg_basebackup 提供的轉儲。

我已經閱讀了很多關於如何提供就地數據庫 升級的文章,但似乎他們都指的是在同級服務器上升級 。

所以我的問題 - 我該如何升級由pg_basebackup在服務器上產生 數據庫備份,而無需以前 發球的PostgreSQL安裝的二進制文件?

謝謝。

+0

你嘗試管'pg_dump'的直接輸出成'psql'?像'pg_dump -h host1 dbname | psql -h host2 dbname'順便說一句:爲什麼你不升級到更新的版本,如9.4或9.5? –

+0

您可以將舊版本(二進制文件+數據)的(二進制)副本發送到新機器(編譯並)在那裏安裝新版本,並在新機器上執行--link(「in-place」)升級。 http://www.postgresql.org/docs/9.5/static/pgupgrade.html [當然,以幹運行開始。舊的安裝仍在舊機器上運行] – wildplasser

回答

0

您可以使用repmgrpg_upgrade執行升級,停機時間最短(幾分鐘)。

  1. 在master(postgresql 9.1)上啓用流式複製。數據庫重啓是必需的

    hot_standby = on 
    wal_keep_segments = 4000 # must be hight enough for standby to catch up 
    
  2. 在備用服務器上安裝PostgreSQL 9.1和9.3。在兩臺服務器上安裝repmgr 2.0。因爲repmgr 3.x版本適用於PostgreSQL 9.3或更高版本。

  3. 同步主和備用服務器:

    repmgr -D /var/lib/postgresql/9.1/main -p 5432 -d repmgr -U repmgr --verbose standby clone -h psql01a.example.net --fast-checkpoint 
    

    下邊pg_basebackup應該被使用。所以這個方法與你所描述的方法非常相似。

  4. 一旦克隆完成後你就可以開始註冊待機:

    repmgr -f /etc/repmgr.conf standby register 
    service postgresql start 
    

    這將使待機趕上覆制期間犯下的主變化。如果你通過升級,你必須停止主檢查

    /usr/lib/postgresql/9.3/bin/pg_upgrade --check \ 
        --old-datadir=/var/lib/postgresql/9.1/main \ 
        --new-datadir=/var/lib/postgresql/9.3/main \ 
        --old-bindir=/usr/lib/postgresql/9.1/bin \ 
        --new-bindir=/usr/lib/postgresql/9.3/bin -v 
    
  5. 隨着運行(同步)兩個數據庫中檢查是否升級是可能的。現在停機時間到了。提升待機狀態。

    postgres#: repmgr standby promote 
    service postgresql start 
    # if everything looks ok, just stop the server 
    service postgresql stop 
    

    最快的升級方法是使用鏈接:

    /usr/lib/postgresql/9.3/bin/pg_upgrade --link \ 
        --old-datadir=/var/lib/postgresql/9.1/main \ 
        --new-datadir=/var/lib/postgresql/9.3/main \ 
        --old-bindir=/usr/lib/postgresql/9.1/bin \ 
        --new-bindir=/usr/lib/postgresql/9.3/bin 
    

    即使有200GB數據升級不會超過幾分鐘的時間(通常小於一分鐘)長。當事情向南時,很難恢復更改(但我們仍然有功能主服務器)。升級完成後,啓動新的服務器。確認一切正常,然後你可以安全地刪除舊的羣集:

    ./delete_old_cluster.sh