# postgres 安装

By [marsdao](https://paragraph.com/@marsdao) · 2022-08-04

---

一、Centos7 YUM 安装 PostgreSQL
===========================

    
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    yum makecache
    yum install postgresql13-server postgresql13-contrib -y
    

二、初始化 & 启动服务
------------

    
    # 默认yum安装路径为 /usr/pgsql-13/bin/
    
    sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
    
    sudo systemctl enable postgresql-13
    sudo systemctl start postgresql-13
    

三、创建DBA账号
=========

    # 默认情况下。linux用户 postgres 拥有访问数据库权限
    # 切换到 postgres 用户
    su - postgres
    # 连接数据库
    psql
    
    # 创建账号
    create user root with password '*';
    # 提升为管理员
    ALTER USER root WITH SUPERUSER;
    # 退出
    \q
    exit
    

四、设置远程连接
========

    # 默认初始化后，pgsql 数据位于 /var/lib/pgsql/13/data
    # 编辑 配置文件
    vim /var/lib/pgsql/13/data/postgresql.conf
    注释掉
    listen_addresses = 'localhost'
    修改为
    listen_addresses = '*'
    保存
    
    # 编辑 访问规则文件
    vim /var/lib/pgsql/13/data/pg_hba.conf
    # 新增
    host all all 0.0.0.0/0 scram-sha-256
    保存
    

参考说明

[从pg\_hba.conf文件谈谈postgresql的连接认证](https://www.cnblogs.com/flying-tiger/p/5983588.html)

重启服务

    systemctl restart postgresql-13.service
    

添加防火墙

    firewall-cmd --zone=public --add-port=5432/tcp --permanent
    firewall-cmd --reload
    

测试

Untitled

五、优化配置
======

pgsql的配置有个在线工具可以直接生成优化配置，根据CPU，内存和硬盘

[PGTune - calculate configuration for PostgreSQL based on the maximum performance for a given hardware configuration](https://pgtune.leopard.in.ua/#/)

Untitled

将配置写入

    vim /var/lib/pgsql/13/data/postgresql.conf
    重启
    
    systemctl restart postgresql-13.service
    systemctl start postgresql-13.service
    systemctl stop postgresql-13.service
    

六、创建用户账号
========

    CREATE USER imspg_admin WITH createdb login PASSWORD '*';
    
    # 创建表空间
    postgres=# create tablespace appuser owner appuser location ‘/appuser’;
    CREATE TABLESPACE
    # 创建数据库
    postgres=# create database appdb with owner appuser tablespace appuser;
    CREATE DATABASE
    

Untitled

[003-Postgresql权限管理总结](https://www.cnblogs.com/xiongzhibiao/articles/8005531.html)

[PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系\_光导纤维-CSDN博客](https://blog.csdn.net/kanon_lgt/article/details/5931522)

标准流程

    1  # 创建新账户
    2  CREATE USER testuser WITH PASSWORD 'testpasswd';
    createdb login
    
    3  
    4  # 将数据库 OWNER 设置为新创建的帐户
    5  ALTER DATABASE testdb OWNER TO testuser;
    6  
    7  # 给新用户授权
    8  GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
    1  # 赋予用户schema的权限
    2  GRANT ALL PRIVILEGES ON SCHEMA illuminant TO testuser;
    3  
    4  # 赋予schema下所有表的权限 
    5  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA illuminant TO testuser;
    

七、流复制配置
=======

编辑配置，设置WAL日志模式

    vim /var/lib/pgsql/13/data/postgresql.conf
    # 添加以下参数
    wal_level = replica
    # 开启存档
    
    archive_mode = on               # enables archiving; off, on, or always
                                    # (change requires restart)
    archive_command = 'cp %p /pgsql_archives/%f'
    
    restore_command TO 'cp /pgsql_archives/%f %p';
    
    # 在回收之前，至少应保留在pg_wal目录中的 WAL 大小。
    wal_keep_size = 1GB
    
    退出保存
    
    #
    chown -R postgres:postgres /pgsql_archives
    chmod -R 0700 /pgsql_archives
    

Untitled

添加访问权限

    vim /var/lib/pgsql/13/data/pg_hba.conf
    # 添加以下参数
    host    replication     repl            10.10.102.181/32      md5
    
    # 允许备库(192.168.102.181)使用repl用户通过scram-sha-256口令认证连接replication数据库[replication是PostgreSQL用于复制的特殊伪数据库的名称]
    

创建复制数据库用户及赋权

    create role repl login replication encrypted password '*';
    

删除副节点的 data目录（如果一开始没有初始化，则不需要删除）

    # 将主库的数据库备份到副节点,并设置流复制
    
    rm -rf /var/lib/pgsql/13/data
    systemctl stop postgresql-13.service
    pg_basebackup -h 10.10.102.180 -p 5432 -U repl -D /var/lib/pgsql/13/data -Fp -R -Xs -P
    
    # 如果有自定义表空间 需要 -T
    
    pg_basebackup -h 10.10.102.180 -p 5432 -U repl -D /var/lib/pgsql/13/data -Fp -R -Xs -P -v -l pangus -T "/var/lib/pgsql/13/data/pangus"=/reptemp
    
    # 重新设置权限
    chown -R postgres:postgres /var/lib/pgsql/13/data/
    #启动数据库
    su - postgres
    /usr/pgsql-13/bin/pg_ctl start
    
    -Fp ： 所有子目录及其内容的简单副本（数据文件等）。
    -R ： 在postgresql.auto.conf 文件中自动配置复制特定设置。
    -Xs： 使用单独的通道/过程，在备份进行中时，从主到待机流流持续更改 （WAL 记录）。
    -P ： 显示备份的进度。
    -c 快速：此标志可用于执行快速检查点，并避免等待，直到懒惰的检查点完成。
    

查看复制（主节点运行）

    su - postgres
    psql -x -c "select * from pg_stat_replication"
    

Untitled

查看复制（从节点）

    su - postgres
    psql -x -c "select * from pg_stat_wal_receiver"
    

Untitled

测试

    # 在主节点创建数据库
    Create database asyncdb;
    # 查看数据库
    \l
    

Untitled

在从库上看，已经同步过来了

Untitled

八、监控
====

安装扩展

    yum -y install postgresql13-contrib.x86_64
    

开启防火墙

    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.14.237" port protocol="tcp" port="1774" accept"
    firewall-cmd --zone=public --add-port=9011/tcp --permanent
    firewall-cmd --zone=public --add-port=9187/tcp --permanent
    firewall-cmd --zone=public --add-port=9100/tcp --permanent
    firewall-cmd --reload
    

在监控机上操作

    ssh-copy-id -i ~/.ssh/id_rsa 10.10.102.180 -p 1774
    ssh-copy-id -i ~/.ssh/id_rsa 10.10.102.181 -p 1774

---

*Originally published on [marsdao](https://paragraph.com/@marsdao/postgres)*
