准备条件
OpenEuler(虚拟机):
版本:22.03-LTS-SP3
下载地址:https://www.openeuler.org/zh/download/
PostgreSQL:
版本:16.3源码包
下载地址:https://www.postgresql.org/ftp/source/
操作系统安装
安装过程与centos基本一致,此处就省略了,安装的时候可以把需要的网络工具和开发工具包勾上,避免后续编译需要去装相应的包。
安装Postgresql
安装步骤
- 阅读官方源码安装说明;
- 下载源码包;
- 根据官方说明安装必须依赖;
- 根据官方说明编译安装PostgreSQL;
- 配置、启动PostgreSQL;
如无特殊说明,本说明是以root账号登录安装,所以特殊需要系统权限命令不再需要sudo前缀,如实际安装过程未采用root账号导致安装出现错误,可尝试在命令前增加sudo。
安装说明
可以查看源码包里的INSTALL文件,主要看前面的两部分Requirements和Short Version。
安装依赖
根据文档说明必要的依赖如下:
- make 需要版本3.81+
- gcc
- tar
- Readline
- zlib
其他可选依赖根据自身需要选装。如果默认安装操作系统的时候选择了开发包,那么上面的依赖基本上都有了。
也可以通过命令全部安装
dnf install readline-devel zlib-devel lz4-devel libzstd-devel systemd-devel python3-devel make gcc
编译安装
解压源码包
tar xvf postgresql-16.3.tar.gz
生成postgresql-16.3目录
官方提供的简单版本的安装命令如下:
./configure ##配置
make ##编译
su ##切换管理员权限
make install ##安装
adduser postgres ##添加postgres用户
mkdir /usr/local/pgsql/data ##创建data存放目录
chown postgres:postgres /usr/local/pgsql/data ##给postgres用户授权
su - postgres ##切换到postgres用户(数据库的操作不允许使用root用户)
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data ##初始化数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ##启动数据库
/usr/local/pgsql/bin/createdb test ##创建test数据库
/usr/local/pgsql/bin/psql test ##连接test数据库
上面的配置一般只需调整路径即可
cd postgresql-16.3
./configure --prefix=/usr/local/postgresql --with-zstd --with-python --with-systemd
make
make install
安装好后位置数据库路径及日志路径
adduser postgres
mkdir /usr/local/postgresql/data
mkdir /usr/local/postgresql/log
chown postgres:postgres /usr/local/postgresql -R
初始化数据库
su - postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data
启动数据库
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start
创建并连接数据库
/usr/local/postgresql/bin/createdb test
/usr/local/postgresql/bin/psql test
访问配置
上面完成后可以通过命令工具在服务器上访问数据库,但是无法通过工具在外网访问,需要进行下面的配置操作。
进入postgrelsql下的data目录,命令及目录结构如下:
base目录是表空间目录,global目录是相关全局变量目录, pg_hba.conf是访问控制配置文件,postgresql.conf是postgresql主配置文件。我们需要修改的配置文件为pg_hba.conf和postgresql.conf文件。
修改pg_hba.conf文件,拉到最下面,如下图所示修改:
pg_hba.conf文件是PostgreSQL数据库系统中的一个配置文件,用于定义客户端与服务器之间的连接规则。pg_hba代表 “host-based authentication”,即基于主机的身份验证。 在这个文件中,可以规定哪些主机地址、哪些用户、以及使用什么方法进行连接,以及是否需要密码等认证信息。这是PostgreSQL数据库管理安全连接的一个重要配置文件。
修改postgresql.conf文件,在展开到内容中找到“# - Connection Settings -”,如下图所示修改:
防火墙配置,对firewall或iptable进行策略配置,放通数据库访问端口5432。firewall的配置样例如下:
##以下命令在root账户下执行
firewall-cmd --zone=public --add-port=5432/tcp --permanent ##配置防火墙放行5432端口
firewall-cmd --reload ##防火墙重新加载配置文件
重启数据库
su - postgres
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log stop
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start
配置数据库密码
/usr/local/postgresql/bin/psql ##使用postgres用户连接默认postgres数据库;
ALTER USER postgres WITH PASSWORD 'postgres'; #修改数据库用户postgres的密码为postgres;
环境变量
目前使用命令仍需要使用全路径执行,为方便使用,配置环境变量。
vi /etc/profile
##将如下内容添加到文件末尾
PATH=/usr/local/postgresql/bin:$PATH
export PATH
##保存退出后执行刷新配置
source /etc/profile
##切换到postgres用户
su - postgres
##此时就可以直接执行psql命令了
psql
开机启动
方式一
PostgreSQL的开机自动启动脚本位于PostgreSQL源码目录下的contrib/start-scripts目录下:
其中linux文件为linux环境下的开机自启动脚本,将其拷贝到“/etc/init.d”目录下,并改名为postgresql:
cp linux /etc/init.d/postgresql
切换到/etc/init.d目录,使用vi打开postgresql文件修改如下内容:
#修改前:
#Installation prefix
prefix=/usr/local/pgsql
#修改后:
#Intalllation prefix[2021-10-25]
prefix=/usr/local/postgresql
#修改前:
# Data directory
#PGDATA="/usr/local/pgsql/data"
#修改后:
# Data directory[2021-10-25]
PGDATA="/usr/local/postgresql/data"
# Who to run the postmaster as, usually "postgres". (NOT "root")
# 将启动用户修改为实际用户,这里使用postgres,所以不变。
PGUSER=postgres
#修改前:
# Where to keep a log file
PGLOG="$PGDATA/serverlog"
#修改后:
# Where to keep a log flie[2021-10-25]
PGLOG="/usr/local/postgresql/log/server.log"
然后修改postgresql文件的执行权限:
chmod a+x postgresql
添加开机启动:
chkconfig --add postgresql
然后重启服务器开机验证即可。
方式二
编辑如下启动文件/lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/postgresql/bin/postgres -D /usr/local/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
添加开机启动并现在启动
systemctl enable postgresql.service --now