postgres 安装

一、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的连接认证

重启服务

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

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权限管理总结

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系_光导纤维-CSDN博客

标准流程

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