欢迎光临

我们一直在努力
当前位置:首页 > 互联网 >

[postgres]配置主从异步流复制

日期:
后台-插件-广告管理-首页/栏目/内容广告位一(PC)
后台-插件-广告管理-首页/栏目/内容广告位一(手机)

前言

环境信息

IP 角色 操作系统 PostgreSQL版本 192.168.1.112 主库 Debian 12 15.3 192.168.1.113 从库 Debian 12 15.3

配置主从

  1. 修改主库的postgresql.conf文件。修改此配置文件需重启数据库服务。归档脚本内容见"附录-clean_archivelog"
listen_addresses = '*'
archive_mode =>
	
  • 主库创建用户
  • create user replicator replication password '1234qwer';
    
    1. 修改主库pg_hba.conf
    host replication replicator 192.168.1.113/24 scram-sha-256
    
    1. 重载pg_hba.conf的配置
    pg_ctl reload -D /home/postgres/apps/pgsql/data/
    
    1. 删除从库的数据目录,备份主库的数据
    rm -rf /home/postgres/apps/pgsql/data
    mkdir /home/postgres/apps/pgsql/data
    chmod -R 700 /home/postgres/apps/pgsql/data
    
    pg_basebackup -h 192.168.1.112 -p 5432 -U replicator -D /home/postgres/apps/pgsql/data/ -P -v -R -X stream -C -S slot1
    
    1. 备份完成后,从库的data目录下自动生成postgresql.auto.confstandby.signal文件。
      1. postgresql.auto.conf包含主库节点的相关连接信息
      2. standby.signal用于标识当前节点为从库节点
    2. 启动从库。PS:因为从库的配置皆从主库复制而来,因此归档脚本也要在从库服务器存在。
    pg_ctl start -D /home/postgres/apps/pgsql/data -l ~/logfile
    

    测试

    1. 主库建库建表添数,之后查看从库是否同步数据
    create database reptest;
    \c reptest
    create table t1(id int, time timestamp);
    insert into t1 values (1, now());
    
    1. 主库psql查看从库的相关信息
    -- 启用扩展输出
    \x
    -- 检查复制状态
    select * from pg_stat_replication;
    
    -[ RECORD 1 ]----+------------------------------
    pid              | 3794
    usesysid         | 16388
    usename          | replicator
    application_name | walreceiver
    client_addr      | 192.168.1.113
    client_hostname  | 
    client_port      | 41708
    backend_start    | 2024-01-27 18:44:08.326476+08
    backend_xmin     | 
    state            | streaming
    sent_lsn         | 0/33FF750
    write_lsn        | 0/33FF750
    flush_lsn        | 0/33FF750
    replay_lsn       | 0/33FF750
    write_lag        | 
    flush_lag        | 
    replay_lag       | 
    sync_priority    | 0
    sync_state       | async
    reply_time       | 2024-01-27 18:54:58.764699+08
    
    1. 查看主库进程,会有walsender进程
    $ ps -ef | grep postgres:
    
    postgres    3794    3739  0 18:44 ?        00:00:00 postgres: walsender replicator 192.168.1.113(41708) streaming 0/33FF750
    
    1. 查看从库进程,会有walreceiver进程
    $ ps -ef | grep postgres:
    
    postgres    1309    1305  0 18:44 ?        00:00:01 postgres: walreceiver streaming 0/33FF838
    

    附录

    clean_archive

    #!/bin/bash
    
    set -u
    
    log_dt=$(date +%F)
    archivelog_dir="/home/postgres/archivelog/${log_dt}"
    
    if [ ! -d "${archivelog_dir}/$1" ]; then
        mkdir -p "${archivelog_dir}/$1"
    fi
    
    cp --preserve=timestamps $2 ${archivelog_dir}/$1
    
    find ${archivelog_dir}/* -type f -mtime +7 | xargs rm -f
    

    作者:花酒锄作田

    后台-插件-广告管理-首页/栏目/内容广告位二(PC)
    后台-插件-广告管理-首页/栏目/内容广告位二(手机)
    后台-插件-广告管理-内容广告位三(PC)
    后台-插件-广告管理-内容广告位三(手机)

    相关阅读

    后台-插件-广告管理-内容广告位四(PC)
    后台-插件-广告管理-内容广告位四(手机)

    聚合标签

    热门文章

    后台-插件-广告管理-侧边广告位一(PC)
    后台-插件-广告管理-侧边广告位一(手机)
    • Windows主机中localhost与127.0.0.1的区别是什么?

    • localhost与127.0.0.1的区别是什么? 相信有人会说是本地IP,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。 这个理解是错误的,其实这两者是有区别的。 localhost也叫l
    • c盘满了怎么清理垃圾而不误删

    • 今天分享的主题是:c盘爆满发出警告如何清理又不误删系统文件。如果你也不会的话就看看下面的经验吧。 c盘满了怎么清理垃圾而不误删 1、很多人在清理c盘垃圾的时候会误删
    • steam怎么退款?

    • 有的时候我们在steam上买了游戏,但是却发现自己的电脑无法加载这款游戏,这时候我们就会想到退款,那么steam如何退款呢?下面小编就来给大家介绍一下。 steam怎么退款? 1、在ste
    • 电脑怎么录屏?如何录制电脑屏幕操作?

    • 如何录制电脑屏幕操作,相信很多朋友们遇到过这种类似的问题,你们对于这类问题如何解决呢?下面就给大家分享一下个人经验,希望可以帮助到大家。 电脑怎么录屏? 方法一:手机录制。
    • 手机如何投屏到电脑?(手机投屏电脑方法)

    • 每次都有新手机发布会,总会提到采用多少英寸的屏幕,但是手机在大的屏幕,也没有手机投屏到电脑、电视的体验爽,下面就一起来看看手机如何投屏到电脑? 手机投屏电脑方法 1、打开
    后台-插件-广告管理-侧边广告位二(PC)
    后台-插件-广告管理-侧边广告位二(手机)

    最新文章

    • [postgres]配置主从异步流复制

    • 前言环境信息 IP 角色 操作系统 PostgreSQL版本 192.168.1.112 主库 Debian 12 15.3 192.168.1.113 从库 Debian 12 15.3 配置主从
    • SQL手工注入

    • 两要素 用户能够控制输入的内容 web应用把用户输入的内容,在没有经过过滤或者严格过滤的情况下带入到数据库中执行分类 GET和POST 整数型,字符型,搜索型万能密码’1 or 1
    • MySQL数据库精选(从入门使用到底层结构)

    • 基本使用MySQL通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据
    • es从线上库导出数据并导入开发环境

    • 背景来了个需求,需要从某个线上es库查询一些数据出来并进行大屏展示。问需求方有没有开发环境的es库,答:没有,说要不直连他们的线上库。后面想想也行吧,业务方都这么说了,结果开网
    • MySQL root密码忘记,原来还有更优雅的解法!

    • 一直以来,对于MySQL root密码的忘记,以为只有一种解法-skip-grant-tables。问了下群里的大咖,第一反应也是skip-grant-tables。通过搜索引擎简单搜索了下,无论是百度,抑或Google,
    后台-插件-广告管理-侧边广告位三(PC)
    后台-插件-广告管理-侧边广告位三(手机)