当前位置: 首页 > news >正文

Rocky9+ 部署PostgreSQL-16

PostgreSQL(简称PGSQL)是一款被誉为“世界上最先进的开源关系型数据库”,它以极致的严谨性、强大的JSON支持以及近乎无限的插件扩展能力,成为了开发者处理复杂业务和高可靠性数据的终极选择。

硬件配置:4GB或更多RAM,2个CPU或更多CPU,硬盘50GB或更多

1、使用yum源安装PGSQL

RockyLinux 9+ 部署 PGSQL-16

Rocky9+更换阿里云yum源

sed-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'\-i.bak\/etc/yum.repos.d/*ocky-*.repo dnf clean all&&dnf makecache

关闭防火墙和selinux

# 永久关闭SELinuxsed-i's/^SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config setenforce0# 永久关闭防火墙systemctl disable--nowfirewalld
1.添加 PostgreSQL 官方仓库
dnfinstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2.禁用系统自带的旧版 PostgreSQL 模块(必须步骤)
dnf-qymodule disable postgresql
3.安装 PostgreSQL 服务器(例如安装版本16)
dnfinstall-ypostgresql16-server
4.初始化数据库
/usr/pgsql-16/bin/postgresql-16-setup initdb

5.启动 PostgreSQL 服务并设置开机自启
systemctlenablepostgresql-16 systemctl start postgresql-16
6.检查服务状态
systemctl status postgresql-16

7.设置 PostgreSQL 用户密码
# 进PGSQL吗命令行sudo-upostgres psql# 修改密码,设置为123456ALTERUSERpostgres WITH PASSWORD'123456';# 退出PGSQL\q

8.配置远程访问

编辑/var/lib/pgsql/16/data/postgresql.conf(通过默认仓库安装路径是:/var/lib/pgsql/data/postgresql.conf),取消注释并修改:

先备份后修改

sed-i.bak"s|#listen_addresses = 'localhost'|listen_addresses = '*'|"/var/lib/pgsql/16/data/postgresql.conf

修改 身份认证配置文件pg_hba.conf

cp/var/lib/pgsql/16/data/pg_hba.conf{,_bak}
cat <<EOF > /var/lib/pgsql/16/data/pg_hba.conf # 本地Unix套接字登录规则,本机操作系统用户免密登录数据库 local all all peer # 规则1:仅允许10.0.0.0/24网段使用postgres账号登录所有业务数据库 host all postgres 10.0.0.0/24 scram-sha-256 # 规则2:除10.0.0.0/24网段外,所有IPv4地址禁止postgres账号登录业务库 host all postgres 0.0.0.0/0 reject # 规则3:所有IPv6地址禁止postgres账号登录业务库 host all postgres ::/0 reject # 规则4:所有IPv4网段、所有数据库、所有普通业务账号,密码认证无网段限制 host all all 0.0.0.0/0 scram-sha-256 # 规则5:所有IPv6网段、所有数据库、所有普通业务账号,密码认证无网段限制 host all all ::/0 scram-sha-256 # 复制规则1:仅10.0.0.0/24网段允许postgres账号执行流复制、pg_basebackup备份操作 host replication postgres 10.0.0.0/24 scram-sha-256 # 复制规则2:非10段所有IPv4地址禁止postgres账号发起复制备份连接 host replication postgres 0.0.0.0/0 reject # 复制规则3:所有IPv6地址禁止postgres账号发起复制备份连接 host replication postgres ::/0 reject # 复制规则4:全网段允许其他数据库账号执行复制备份操作 host replication all 0.0.0.0/0 scram-sha-256 # 复制规则5:全网段IPv6允许其他数据库账号执行复制备份操作 host replication all ::/0 scram-sha-256 # 本地套接字复制备份权限,本机pg_basebackup本地备份免密 local replication all peer # 本机IPv4回环地址复制备份权限,密码认证 host replication all 127.0.0.1/32 scram-sha-256 # 本机IPv6回环地址复制备份权限,密码认证 host replication all ::1/128 scram-sha-256 EOF

修改完成后重启PGSQL

systemctl restart postgresql-16

2、使用编译部署PGSQL

1.关闭 SELinux、防火墙
# 永久关闭SELinuxsed-i's/^SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config setenforce0# 永久关闭防火墙systemctl disable--nowfirewalld
2.安装编译依赖包
dnf groupinstall-y"Development Tools"dnfinstall-yreadline-devel zlib-devel openssl-devel libxml2-devel\libxslt-devel perl-devel python3-devel gcc gcc-c++makecmake bison flex\libicu-devel libuuid-devel libzstd-devel systemd-devel lz4-devel
3.系统内核 / 资源限制调优

文件句柄、进程数限制

cat>/etc/security/limits.d/99-postgres.conf<<EOF postgres soft nproc 65535 postgres hard nproc 65535 postgres soft nofile 1048576 postgres hard nofile 1048576 postgres soft stack unlimited postgres hard stack unlimited EOF

内核网络 / 内存参数

cat>/etc/sysctl.d/99-postgresql-16.conf<<EOF # PostgreSQL 16 生产环境内核调优参数 # 共享内存、信号量、文件句柄、网络TCP优化 kernel.shmmax = 68719476736 kernel.shmmni = 4096 kernel.shmall = 4294967296 kernel.sem = 50100 6412800 50100 128 fs.file-max = 767200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 60 net.ipv4.tcp_fin_timeout = 30 EOF

生效内核参数

sysctl-p
4.创建 PG 专用运行用户 & 目录
# 创建运行用户useradd-m-s/bin/bash postgres# 设置密码(生产高强度密码)passwdpostgres# 创建pgsql的部署、数据、日志目录mkdir-p/usr/local/pgsql16/{data,log}# 授权归属chown-Rpostgres:postgres /usr/local/pgsql16# 数据目录严格权限700,仅postgres用户可访问chmod700-R/usr/local/pgsql16/data# 日志、备份放宽为750,同组可读chmod750-R/usr/local/pgsql16/log
5.下载源码包

切换到临时编译目录

configure 编译参数

开启 SSL、ICU 国际化、Python/Perl 扩展、systemd 集成、LZ4/ZSTD 压缩

./configure\--prefix=/usr/local/pgsql16\--with-systemd\--with-openssl\--with-icu\--with-readline\--with-zlib\--with-lz4\--with-zstd\--with-python\--with-libxml\--with-libxslt

编译 & 安装

make-j$(nproc)makeinstall

安装官方扩展插件

cdcontribmake-j$(nproc)makeinstall
6.配置全局变量
cat>/etc/profile.d/pgsql16.sh<<EOF export PGHOST=127.0.0.1 export PGHOME=/usr/local/pgsql16 export PATH=\$PGHOME/bin:\$PATHexport PGDATA=/usr/local/pgsql16/data export LD_LIBRARY_PATH=\$PGHOME/lib:\$LD_LIBRARY_PATHEOF

生效环境变量

source/etc/profile.d/pgsql16.sh

验证版本

psql--version

7.初始化数据库

切换 postgres 用户执行,指定 UTF8 区域,彻底规避中文乱码

# 先切换到 postgres 用户su- postgres# 执行初始化操作initdb\-D/usr/local/pgsql16/data\-EUTF8\--locale=en_US.utf8\-Upostgres\-W

参数说明:

  • -E UTF8:数据库集群默认字符集 UTF8
  • --locale=en_US.utf8:排序 / 区域编码统一 UTF8,跨平台兼容
  • -W:初始化时设置超级用户 postgres 高强度密码

8.生产级配置文件调优

进入数据目录修改 核心配置:postgresql.conf pg_hba.conf

cd/usr/local/pgsql16/data

postgresql.conf关键生产参数

备份原配置文件

cppostgresql.conf postgresql.conf.bak

写入生产配置

cat > postgresql.conf <<EOF # 基础网络 listen_addresses = '*' port = 5432 max_connections = 1000 # 内存调优 shared_buffers = 1GB # PG专用共享内存缓冲区,推荐物理内存 25% work_mem = 16MB maintenance_work_mem = 1GB effective_cache_size = 3GB # 查询优化器估算可用总缓存,一般设总内存 70~75% # 磁盘IO wal_buffers = 16MB wal_level = replica max_wal_size = 1GB min_wal_size = 1GB wal_compression = on # 日志(生产必须开启) logging_collector = on log_directory = '/usr/local/pgsql16/log' log_filename = 'postgresql-%Y-%m-%d.log' log_rotation_size = 100MB log_rotation_age = 1d log_statement = 'mod' log_checkpoints = on log_connections = on log_disconnections = on # 字符集 client_encoding = utf8 default_text_search_config = 'pg_catalog.english' # 自动vacuum清理 autovacuum = on autovacuum_max_workers = 4 autovacuum_naptime = 30s # SSL加密(建议开启,如果没有需要,直接注释) ssl = on ssl_prefer_server_ciphers = on # 并行查询 max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # 设置时区 timezone = 'Asia/Shanghai' log_timezone = 'Asia/Shanghai' # 检查点优化,减少IO瞬时毛刺 checkpoint_timeout = 10min checkpoint_completion_target = 0.9 # 自动清理阈值微调,及时清理膨胀表 autovacuum_vacuum_scale_factor = 0.05 autovacuum_analyze_scale_factor = 0.02 autovacuum_vacuum_cost_delay = 2ms EOF

生产环境必须生成自签证书

切换 postgres 用户,进入 data 目录生成 10 年有效期证书:

su- postgrescd/usr/local/pgsql16/data# 生成私钥+自签证书openssl req-new-x509-days3650-nodes-text-outserver.crt-keyoutserver.key-subj"/CN=pg16-server"# 私钥权限严格0600chmod600server.keychownpostgres:postgres server.crt server.key

pg_hba.conf关键生产参数

备份原配置文件

cppg_hba.conf pg_hba.conf_bak

写入配置

cat <<EOF > /var/lib/pgsql/16/data/pg_hba.conf # 本地Unix套接字登录规则,本机操作系统用户免密登录数据库 local all all peer # 规则1:仅允许10.0.0.0/24网段使用postgres账号登录所有业务数据库 host all postgres 10.0.0.0/24 scram-sha-256 # 规则2:除10.0.0.0/24网段外,所有IPv4地址禁止postgres账号登录业务库 host all postgres 0.0.0.0/0 reject # 规则3:所有IPv6地址禁止postgres账号登录业务库 host all postgres ::/0 reject # 规则4:所有IPv4网段、所有数据库、所有普通业务账号,密码认证无网段限制 host all all 0.0.0.0/0 scram-sha-256 # 规则5:所有IPv6网段、所有数据库、所有普通业务账号,密码认证无网段限制 host all all ::/0 scram-sha-256 # 复制规则1:仅10.0.0.0/24网段允许postgres账号执行流复制、pg_basebackup备份操作 host replication postgres 10.0.0.0/24 scram-sha-256 # 复制规则2:非10段所有IPv4地址禁止postgres账号发起复制备份连接 host replication postgres 0.0.0.0/0 reject # 复制规则3:所有IPv6地址禁止postgres账号发起复制备份连接 host replication postgres ::/0 reject # 复制规则4:全网段允许其他数据库账号执行复制备份操作 host replication all 0.0.0.0/0 scram-sha-256 # 复制规则5:全网段IPv6允许其他数据库账号执行复制备份操作 host replication all ::/0 scram-sha-256 # 本地套接字复制备份权限,本机pg_basebackup本地备份免密 local replication all peer # 本机IPv4回环地址复制备份权限,密码认证 host replication all 127.0.0.1/32 scram-sha-256 # 本机IPv6回环地址复制备份权限,密码认证 host replication all ::1/128 scram-sha-256 EOF
9.Systemd 服务托管

创建 systemd 服务文件

cat > /etc/systemd/system/postgresql-16.service <<EOF [Unit] Description=PostgreSQL 16 Database Server Documentation=https://www.postgresql.org/docs/16/static/ After=network.target [Service] Type=forking User=postgres Group=postgres Environment="PGDATA=/usr/local/pgsql16/data" Environment="PGHOME=/usr/local/pgsql16" ExecStart=/usr/local/pgsql16/bin/pg_ctl start -D \${PGDATA} -l /usr/local/pgsql16/log/pg_start.log ExecStop=/usr/local/pgsql16/bin/pg_ctl stop -D \${PGDATA} -m fast ExecReload=/usr/local/pgsql16/bin/pg_ctl reload -D \${PGDATA} PIDFile=/usr/local/pgsql16/data/postmaster.pid PrivateTmp=true LimitNOFILE=1048576 LimitNPROC=65535 [Install] WantedBy=multi-user.target EOF

重载 systemd、设置开机自启

systemctl daemon-reload systemctlenablepostgresql-16# 启动数据库systemctl start postgresql-16# 查看运行状态systemctl status postgresql-16
10.日志自动轮转

创建 logrotate 规则

cat > /etc/logrotate.d/pg16 <<EOF /usr/local/pgsql16/log/postgresql-*.log { daily rotate 15 compress delaycompress missingok copytruncate owner postgres postgres } EOF
11.初始化生产安全加固(可选)

密码加密策略

su- postgres psql-Upostgres# 设置超级用户强密码ALTERUSERpostgres WITH PASSWORD'SuperStrong@PG162026';# 设置全局默认密码加密SET password_encryption='scram-sha-256';ALTER SYSTEM SET password_encryption='scram-sha-256';SELECT pg_reload_conf();

配置成功截图

创建业务专用库与业务账号

-- 创建业务数据库 CREATE DATABASE business_db ENCODING'UTF8'LC_COLLATE'en_US.utf8'LC_CTYPE'en_US.utf8';-- 创建业务只读账号 CREATEUSERbusiness_r WITH PASSWORD'BusinessRead@2026';-- 创建业务读写账号 CREATEUSERbusiness_rw WITH PASSWORD'BusinessWrite@2026';-- 赋权 GRANT CONNECT ON DATABASE business_db TO business_r,business_rw;GRANT SELECT ON ALL TABLES IN SCHEMA public TO business_r;GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON ALL TABLES IN SCHEMA public TO business_rw;

日常运维命令

# 启停服务systemctl start/stop/restart postgresql-16# 重载配置systemctl reload postgresql-16# 查看实时日志tail-f/data/pg16_log/postgresql-$(date+%Y-%m-%d).log# 备份全库pg_dump-Upostgres-dbusiness_db-Fc-f/data/pg16_backup/business_$(date+%Y%m%d).dump# 登录数据库psql-Upostgres-dpostgres-h127.0.0.1
http://www.jsqmd.com/news/1177532/

相关文章:

  • AI代码安全扫描实战:从传统SAST失效到LLM专项检测部署
  • 亨得利官方名表服务中心|全新维修地址及服务热线权威信息通知(2026年7月最新) - 亨得利官方博客
  • TMC7300+TM4C129LNCZAD驱动有刷电机方案详解
  • [入门赛 #49] GPA 计算?题解
  • 2026最新南通本地漏水检测公司本地精选权威推荐:正规防水补漏公司优选口碑TOP5:卫生间/厨房/阳台/飘窗/地下室渗漏水维修师傅上门 - 即刻修防水
  • OpenCV图像二值化在矩形识别中的应用与泰山派实战
  • AI换脸革命:无需训练的深度伪造神器roop-unleashed深度体验指南
  • 强力辅助Seraphine:英雄联盟智能决策助手,让每一局都赢在起跑线
  • 2026年杭州自建房花园设计施工公司怎么选? - 品牌排行榜
  • 2026年当下,如何联系优质中式快餐加盟平台?深度剖析曼玲粥 - 品牌鉴赏官2026
  • AI驱动的C++跨平台迁移:从语义理解到自动化代码重构
  • 还在为论文开题头秃?这5个AI论文写作工具让你效率翻倍!
  • Keras模型Flask部署实战:轻量级API服务化指南
  • 亨得利官方名表服务中心|服务热线及完整地址权威信息声明(2026年7月最新) - 亨得利官方博客
  • 数据开发 vs 数据分析:从3个真实项目看技能栈与协作边界
  • 5分钟在Mac上运行Windows应用:Whisky完全指南 [特殊字符]
  • 洛雪音乐播放失效?3步快速恢复六音音源完整教程
  • 3步解决QQ音乐加密格式转换难题:QMCDecode让音乐重获自由
  • 亲身到店探访杭州亨得利官方名表服务中心|维修地址及售后热线(2026年7月更新) - 亨得利官方
  • Reloaded-II:让游戏焕然一新的模组管理神器
  • 成为更好的自己
  • 9款AI论文工具:一键生成毕业论文、期刊论文、开题报告与文献综述
  • Windows服务器安全守护神:Wail2Ban自动封锁工具终极指南
  • 天融信防火墙策略配置对比:区域隔离、NAT与应用过滤的5个关键差异点
  • 亲身到店探访杭州亨得利官方名表服务中心|详细地址与售后电话(2026年7月更新) - 亨得利官方
  • 2026年7月最新温州美度官方售后客户服务电话及线下网点地址 - 亨得利钟表维修中心
  • 高压与低压系统互联的光耦隔离技术解析
  • Sunshine游戏串流:5步打造你的专属家庭云游戏服务器
  • 2026年7月最新武汉泰格豪雅官方售后客服服务电话及地址网点大全 - 亨得利官方服务中心
  • 【PostgreSQL-16】搭建主从复制实现读写分离与故障转移