zoukankan      html  css  js  c++  java
  • postgresSQL主从流复制安装

    命令行运维:

    https://blog.csdn.net/zhangzeyuaaa/article/details/77941039

    安装流程:

    先准备类库:

    yum -y install readline-devel zlib-devel

    下载postgresql-9.6.9.tar.gz到两台机器上解压后进入并:

    ./configure --prefix=/main/postgresql

    然后make  make install就ok,接着改一下属主:

    adduser postgres
    passwd postgres
    chown -R postgres:postgres /main/postgresql

    创建数据文件目录

    mkdir -p /main/postgresql/data

    创建log文件

    mkdir /main/postgresql/logs
    touch /main/postgresql/logs/postgresql.log

    初始化数据库:

    /main/postgresql/bin/initdb -D /main/postgresql/data

    可以看到data下多出来一堆文件

    [postgres@iz2zej5nlztmm1frnyl4wxz postgresql]$ ll data/
    总用量 112
    drwx------ 5 postgres postgres  4096 7月  30 15:16 base
    drwx------ 2 postgres postgres  4096 7月  30 15:16 global
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_clog
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_commit_ts
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_dynshmem
    -rw------- 1 postgres postgres  4468 7月  30 15:16 pg_hba.conf
    -rw------- 1 postgres postgres  1636 7月  30 15:16 pg_ident.conf
    drwx------ 4 postgres postgres  4096 7月  30 15:16 pg_logical
    drwx------ 4 postgres postgres  4096 7月  30 15:16 pg_multixact
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_notify
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_replslot
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_serial
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_snapshots
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_stat
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_stat_tmp
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_subtrans
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_tblspc
    drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_twophase
    -rw------- 1 postgres postgres     4 7月  30 15:16 PG_VERSION
    drwx------ 3 postgres postgres  4096 7月  30 15:16 pg_xlog
    -rw------- 1 postgres postgres    88 7月  30 15:16 postgresql.auto.conf
    -rw------- 1 postgres postgres 22300 7月  30 15:16 postgresql.conf

    设置环境变量:

    export PGDATA=/main/postgresql/data 
    export PATH=${JAVA_HOME}/bin:/main/mysql5.6.41/bin:/main/postgresql/bin:$PATH

    source一下生效之

    启动下测试下:

    pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

    看看日志:

    cat postgresql.log 
    LOG:  could not bind IPv6 socket: 无法指定被请求的地址
    HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
    LOG:  database system was shut down at 2018-07-30 15:16:13 CST
    LOG:  MultiXact member wraparound protections are now enabled
    LOG:  database system is ready to accept connections
    LOG:  autovacuum launcher started

    连一下:

    psql
    psql (9.6.9)
    Type "help" for help.
    
    postgres=# 

    ok

    接下来可以开始配置主从---------------------------------

    主库创建同步用户:

    psql
    psql (9.6.9)
    Type "help" for help.
    
    postgres=# create role repl login replication encrypted password 'xxxxx';

    可以查到用户:

    postgres=# select usename from pg_user;
     usename  
    ----------
     postgres
     repl
    (2 rows)

    vim pg_hba.conf设置访问权限,开放从节点密码读取:

    xx.xx.xx.xx是从节点的ip

    host    replication     repl        xx.xx.xx.xx/32            md5

    同时开放其他局域网内的应用节点密码访问:

    host    all             all             yy.yy.yy.00/24            md5

    修改核心配置文件:

    Listen_adresses = ‘*’
    wal_level = hot_standby                主从设置为热血模式,流复制必选
    max_wal_senders=2    流复制允许连接进程
    wal_keep_segments =64    
    max_connections = 100    默认参数,非主从配置相关参数,表示到数据库的连接数

    从节点:

    从库安装完成后,不初始化,若已经初始化,删除其data目录

    从节点从主节点去读取:

    pg_basebackup -h 172.17.222.161 -p 5432 -U repl -F p -P -D /main/postgresql/data
    Password: 输入密码
    22824/22824 kB (100%), 1/1 tablespace
    NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup

    在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,注释掉
    wal_level,
    max_wal_senders 
    wal_keep_segments等参数
    打开如下参数:
    vi /postgres/data/postgresql.conf
    hot_standby = on   #在备份的同时允许查询
    max_standby_streaming_delay = 30s #可选,流复制最大延迟
    wal_receiver_status_interval = 10s #可选,从向主报告状态的最大间隔时间
    hot_standby_feedback = on #可选,查询冲突时向主反馈
    max_connections = 1000 #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

    创建恢复文件recovery.conf

    cp ../share/recovery.conf.sample recovery.conf
    调整参数:
    recovery_target_timeline = 'latest'
    standby_mode = on
    primary_conninfo = 'host=172.17.222.161 port=5432 user=repl password=xxxxx'      

    备注:
    recovery.conf    #在做基础备份时,也可通过-R参数在备份结束后自动生产一个recovery.conf文件
    standby_mode = on  #指明从库身份
    primary_conninfo = 'host=10.0.120.150 port=5432 user=repl password=repl1234'  #连接到主库信息
    recovery_target_timeline = 'latest'     #同步到最新数据
    指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库

    #trigger_file = ‘/main/postgres/data/trigger_activestandby’

     从库启动

    pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

    主库看看状态 

    主库进程:

    从库进程:

     测试:

    create table test(id int primary key, name varchar(20));

    从库只能读取------写入执行报错:

    主库执行读写都ok,不过一般用来写:

    主从分别查看同步状态:

    pg_controldata /main/postgresql/data/

    主节点:

    从节点:

     到此主从复制建立完成。

    测试自动主从切换:

    1)主库上执行:
    su - postgres
    pg_ctl stop -m fast         #停主库日志
    pg_controldata /postgres/data/ #此时Database cluster state: shutdown
    (2)从库切换为主库:
    su - postgres
    pg_ctl promote
    pg_controldata /postgres/data #此时Database cluster state: Inproduction

    修改了postgresql.conf中的端口
    psql -p 23532
    和pg_hba.conf中的访问权限,仅限内网访问

     

    一、建立数据库连接

    接入PostgreSQL数据库,切换到pg的用户:

    psql -h IP地址 -p 端口  -U 数据库名 

    之后会要求输入数据库密码

    二、访问数据库

    1、列举数据库:l
    2、选择数据库:c  数据库名
    3、查看该某个库中的所有表:dt
    4、切换数据库:c interface
    5、查看某个库中的某个表结构:d 表名
    6、查看某个库中某个表的记录:select * from apps limit 1;
    7、显示字符集:encoding
    8、退出psgl:q

    三、dump数据库

    命令:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 目标数据库名

    之后会要求输入数据库用户密码

    参数:

        # -h: PostgreSQL服务器的主机为192.168.149.137。
        # -U: 登录用户为postgres。
        # -t: 导出表名以test开头的数据表,如testtable。
        # -a: 仅仅导出数据,不导出对象的schema信息。
        # -f: 输出文件是当前目录下的my_dump.sql

    实例:

        # mydatabase是此次操作的目标数据库。
        /> pg_dump -h 192.168.149.137 -U postgres -t test* -a -f ./my_dump.sql mydatabase
        #-c: 先输出删除数据库对象的SQL命令,在输出创建数据库对象的SQL命令,这对于部署干净的初始系统或是搭建测试环境都非常方便。
        /> pg_dump -h 192.168.220.136 -U postgres -c -f ./my_dump.sql mydatabase
        #导出mydatabase数据库的信息。在通过psql命令导入时可以重新指定数据库,如:/> psql -d newdb -f my_dump.sql
        /> pg_dump -h 192.168.220.136 -U postgres -f ./my_dump.sql mydatabase
        #导出模式为my_schema和以test开头的数据库对象名,但是不包括my_schema.employee_log对象。
        /> pg_dump -t 'my_schema.test*' -T my_schema.employee_log mydatabase > my_dump.sql
        #导出east和west模式下的所有数据库对象。下面两个命令是等同的,只是后者使用了正则。
        /> pg_dump -n 'east' -n 'west' mydatabase -f my_dump.sql
        /> pg_dump -n '(east|west)' mydatabase -f my_dump.sql

     四、恢复dump的数据库

    命令:psql -h IP地址 -p 端口 -U 数据库用户名 -d 目标数据库名 -f 目标存储文件及路径

    之后会要求输入数据库用户密码

    参数:

        # -h: PostgreSQL服务器的主机为192.168.149.137。
        # -U: 登录用户为postgres。
        # -f: 输出文件是当前目录下的my_dump.sql

     五、压缩dump数据库及其恢复

    压缩dump:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 -Fc 目标数据库名

    恢复:pg_restore -h IP地址 -p 端口 -U 数据库用户名 -Fc -d 目标数据库名 目标存储文件及路径

    附:压缩dump后文件大小会缩小10倍

    六、使用系统表查询数据库个数

    执行sql命令:select count(*) from pg_database where datname like 'db%';

  • 相关阅读:
    C# 调用Java Webservice 加入SoapHeader 验证信息
    SqlServer查找表中多余的重复记录
    INI文件的读写
    Sql触发器脚本
    Sql遍历更新脚本
    CAS 单点登录,通过ticket 获取登录用户
    模块 | 验证格式
    aja如何解决跨域请求?
    说说各个浏览器box模型
    Vue 双向数据绑定原理分析
  • 原文地址:https://www.cnblogs.com/radio/p/9391902.html
Copyright © 2011-2022 走看看