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”表测试,能立刻同步到从库中:

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