ubuntu16 64位 postgresql主從庫備份

前言:

    本人在網上找了很多關於postgresql的雙機主從庫備份的教程,並不能跑起來,期間遇到了很多坑,搭建無果,一言難盡;最後慢慢摸索出來的方式,有不足處望大神多多指導。

 

官方文檔明確表示:recovery.conf文件已與postgres.conf合併請看以下找到的官方內容(此內容請以官方爲準),所以使用此教程那麼從機服務器儘量使用postgresql 12 之前的版本:


Move recovery.conf settings into postgresql.conf (Fujii Masao, Simon Riggs, Abhijit Menon-Sen, Sergei Kornilov)

recovery.conf is no longer used, and the server will not start if the file exists. recovery.signal and standby.signal are now used to switch into non-primary mode. trigger_file has been renamed to promote_trigger_file. The standby_mode setting has been removed.

 

 

廢話不多說直接開始吧:

正文:

一,配置環境與主從機服務器說明:
    本人用的是Ubuntu16的64位系統版本,主從機服務器部署了postgresql 9.5版本
    主機服務器IP:192.168.190.131
    從機服務器IP:192.168.190.132
    
二,先來配置主服務器(需要安裝postgresql的小夥伴看我另外一篇安裝教程:https://my.oschina.net/u/2336787/blog/5272061):
    主服務器需要配置允許從服務器可以通過內部job任務取得數據流的用戶以及配置。
    
    開始你的配置:
    vim /etc/postgresql/9.5/main/postgresql.conf
    添加下面配置項:
    listen_addresses = '192.168.190.131' #配置主庫的ip,查找命令:ip addr
    wal_level = hot_standby #
    synchronous_commit = local #同步本地設置。
    max_wal_senders = 2
    wal_keep_segments = 10
    
    pg_hba.conf文件配置,添加允許的用戶列表
    vim /etc/postgresql/9.5/main/pg_hba.conf
    添加以下內容:
    host    replication     repl          127.0.0.1/32                  md5 #授權repl用戶本地訪問
    host    replication     repl          192.168.190.131/32            md5 #授權repl用戶主機服務器ip地址訪問
    host    replication     repl          192.168.190.132/32            md5 #授權repl用戶從機服務器ip地址訪問
    
    啓動服務器執行命令查看啓動端口情況:
    sudo /etc/init.d/postgresql start;
    sudo netstat -tnlp |grep 5432
    
    
    成功標誌結果(如果未能啓動成功請檢查是否正確配置):
    root@ubuntu:/# sudo /etc/init.d/postgresql start;
    [ ok ] Starting postgresql (via systemctl): postgresql.service.
    root@ubuntu:/# sudo netstat -tnlp |grep 5432
    tcp        0      0 192.168.190.131:5432    0.0.0.0:*               LISTEN      920/postgre
    
    此時已經配置好,但現在還滅有配置項的授權用戶,接下來創建一下授權用戶:
    執行命令:
    sudo -u postgres psql
    創建授權用戶:
    postgres=# CREATE USER repl REPLICATION LOGIN ENCRYPTED PASSWORD '123456';

三,再來配置從服務器(需要安裝postgresql 的小夥伴看我另外一篇安裝教程:https://my.oschina.net/u/2336787/blog/5272061):
    從服務器只有讀取(READ)權限,沒有寫入權限,所以不能修改。
    配置前停止數據庫:
    sudo /etc/init.d/postgresql stop;
    
    執行命令編輯配置文件:
    vim /etc/postgresql/9.5/main/postgresql.conf
    添加下面配置項:
    listen_addresses = '192.168.190.131' #配置主庫的ip,查找命令:ip addr
    wal_level = hot_standby #
    synchronous_commit = local #同步本地設置。
    max_wal_senders = 2 #
    wal_keep_segments = 10 #
    hot_standby = on #
    
    切換postgres用戶
    su - postgres
    
    備份原來的main文件夾:
    mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main20211013.bak
    創建一個新文件夾main
    mkdir /var/lib/postgresql/9.5/main
    賦權:
    chmod 700 /var/lib/postgresql/9.5/main
    chown -R postgres.postgres /var/lib/postgresql/9.5/main
    
    將連接主機服務器拷貝對應的main數據流
    pg_basebackup -h 192.168.190.131 -U repl -D /var/lib/postgresql/9.5/main -P --xlog  #如需要直接添加recovery.conf在命令後面添加   -R  即可。
    
    添加一個recovery.conf文件,執行命令:
    vim /var/lib/postgresql/9.5/main/recovery.conf
    在該文件添加下面內容:
    standby_mode = 'on'
    primary_conninfo = 'host=192.168.190.131 port=5432 user=repl password=123456'
    trigger_file = '/tmp/postgresql.trigger.5432'
    
    再授權:
    chmod 600 /var/lib/postgresql/9.5/main/recovery.conf
    chown -R postgres.postgres /var/lib/postgresql/9.5/main/recovery.conf
    
    啓動服務器執行命令查看啓動端口情況:
    sudo /etc/init.d/postgresql start;
    sudo netstat -tnlp |grep 5432
    
    
    成功標誌結果(如果未能啓動成功請檢查是否正確配置):
    root@ubuntu:/# sudo /etc/init.d/postgresql start;
    [ ok ] Starting postgresql (via systemctl): postgresql.service.
    root@ubuntu:/# sudo netstat -tnlp |grep 5432
    tcp        0      0 192.168.190.132:5432    0.0.0.0:*               LISTEN      920/postgre
    

效果呈現:

測試一:當主庫變動也將熱備份到從庫當中。而從庫中只有讀取沒有寫入功能

測試二:當從庫操作寫入時不允許操作:

測試三:主庫刪除“tttttt”表測試,能立刻同步到從庫中:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章