centos 7.6 离线安装postgresql 17

因为部署的服务器无法访问网络,所以需要源码编译安装 PostgreSQL。
本文详细记录了在 CentOS 7.6 上源码编译安装 PostgreSQL 17 的完整过程。需要准备2台相同版本的服务器 1台可以联网的 1台内网.
系统版本:centos 7.6
postgresql版本:17.4 下载地址:https://mirrors.tuna.tsinghua.edu.cn/postgresql/source/v17.4/postgresql-17.4.tar.gz
pgadmin 下载地址:https://mirrors.tuna.tsinghua.edu.cn/postgresql/pgadmin/pgadmin4/v9.2/windows/

获取必要的依赖:

在可以联网的服务器上


## 创建目录
mkdir ~/offline-packages17
#导出依赖包到指定目录~/offline-packages17
yumdownloader --resolve --destdir ~/offline-packages17   gcc make readline-devel zlib-devel openssl-devel libxml2-devel pam-devel libicu-devel bison flex perl
``` sh
压缩依赖包/home/offline-packages17 并下载到内网服务器
``` sh
tar -zcvf offline-packages17.tar.gz /home/offline-packages17

准备工作

  • 创建用户和组:
 sudo groupadd postgres
 sudo useradd -g postgres postgres
  • 将文件offline-packages17.tar.gz 上传到内网服务器并解压
tar -xzvf offline_packages17.tar.gz ~/offline_packages17
  • 安装依赖
   rpm -Uvh *.rpm --nodeps  --force

image

  • 上传postgresql-17.4.tar.gz到目录~/offline-packages17 并解压
   tar -xzvf postgresql-17.4.tar.gz

编译与安装

  • 配置检测
  #切换目录
 cd postgresql-17.4
 #开始编译
 ./configure --prefix=/usr/local/pgsql17 --with-pam --enable-nls --with-pgport=5432 --with-openssl --with-libxml

  • 编译
make

若是make失败看看缺失了什么就在可以联网的服务器上导出依赖
image

  • 安装
sudo make install

这时安装的目录在/usr/local/pgsql17

数据库初始化和启动

  • 创建数据存储目录
sudo mkdir /usr/local/pgsql17/data
#授权数据权限给 postgres
sudo chown postgres:postgres /usr/local/pgsql17/data
  • 初始化数据库
# 设置合适的 locale,例如 zh_CN.UTF-8
 sudo -u postgres /usr/local/pgsql17/bin/initdb -D /usr/local/pgsql17/data --locale=en_US.UTF-8 

image

若是提示无权限什么的,最暴力的方式是授权postgres的目录 pgsql17 sudo chown -R postgres:postgres /usr/local/pgsql17

  • 创建 systemd 服务文件
    创建/etc/systemd/system/postgresql-17.service文件,并添加以下内容(注意替换路径):
[Unit]
Description=PostgreSQL 17 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql17/bin/pg_ctl start -D /usr/local/pgsql17/data
ExecStop=/usr/local/pgsql17/bin/pg_ctl stop -D /usr/local/pgsql17/data -m fast
ExecReload=/usr/local/pgsql17/bin/pg_ctl reload -D /usr/local/pgsql17/data
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=300

[Install]
WantedBy=multi-user.target
  • 启动
#重新加载 systemd 配置:
sudo systemctl daemon-reload
#启动
sudo systemctl start postgresql-17
#设置开启启动
sudo systemctl enable postgresql-17

image

-配置环境变量

vi /home/postgres/.bash_profile

添加/usr/local/pgsql17/bin
image

刷新配置

 source /home/postgres/.bash_profile

#测试
 su postgres
 psql -c "SELECT version();"

image

配置远程访问

  • 修改 postgresql.conf:
 vi /usr/local/pgsql17/data/postgresql.conf

找到listen_addresses,修改为:

listen_addresses = '*'  # 监听所有接口

image

  • 修改 pg_hba.conf
 vi /usr/local/pgsql17/data/pg_hba.conf

在文件末尾添加以下行,允许某些ip访问,这里直接设置所有ip允许

 host    all             all             0.0.0.0/0               trust

image

重启 PostgreSQL 服务:

  systemctl restart postgresql-17

防火墙设置

sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

验证安装

sudo -u postgres /usr/local/pgsql17/bin/psql -c "SELECT version();"

image

创建用户和数据库

sudo -u postgres /usr/local/pgsql17/bin/psql
CREATE USER your_username WITH PASSWORD 'your_strong_password';  -- 创建用户并设置密码
CREATE DATABASE your_database;  -- 创建数据库
GRANT ALL PRIVILEGES ON DATABASE your_database TO your_username;  -- 授予权限

修改postgres 密码

首先,使用psql工具连接到PostgreSQL服务器:

sudo -u postgres psql

然后,使用以下命令修改密码

ALTER USER postgres WITH PASSWORD 'newpassword';

最后,退出psql客户端:

\q 或exit
posted @ 2025-04-16 14:54  风痕天下  阅读(783)  评论(1)    收藏  举报