首页 > 数据库 >PostgreSQL 安装部署系列:采用源码方式在Centos 7.9 安装指定 PostgreSQL 数据库

PostgreSQL 安装部署系列:采用源码方式在Centos 7.9 安装指定 PostgreSQL 数据库

时间:2024-12-10 15:00:33浏览次数:6  
标签:PostgreSQL postgres -- 数据库 xsky 源码 postgresql 安装 node4

==========================================
 
现供职于某上市互联网公司担任DBA
Oracle & PG ACE称号,
拥有 Oracle OCM、AWS、以及部分国产数据库等产品认证。
喜欢技术分享,热爱交友,也热爱健身。
2019年加入墨天轮,目前已发表了一百多篇原创文章,曾多次获评"月度墨力之星"。
OceanBase、PG中国分会、IvorySQL等南京地区组织者,也是TeckTalk技术交流社区创始人。
个人微信公众号: 尚雷的驿站
可微信公众号搜索 : 尚雷的驿站

==========================================

一、前言

本文作为“PostGreSQL安装部署系列”姊妹篇,在前一篇《PostGreSQL安装部署系列:使用YUM 方式在Centos 7.9 安装指定PostGreSQL-15版本数据库》文章中,曾使用YUM方式安装PostGreSQL 15.5版本数据库,本次我将选择采用源码方式来安装PostGreSQL数据库。

一般什么情况下会选择采用源码来安装数据库呢,通常是为了学习研究,比如想了解某个版本数据库与其它版本有哪些不同,同一台服务器上安装多个版本数据库;另外采用源码安装,可以按需进行定制化编译,设置编译参数,比较灵活;另外可以通过调整参数选择安装到指定目录。

通常生产环境不会选择编译安装,除非你对该数据库很熟,能轻松驾驭,生产环境一般会选择二进制方式安装较新且稳定版本数据库。

源码编译安装PostGreSQL数据库和其它源码安装数据库类似,通常有四步,分别如下:

第一步,环境准备:这一步通常是环境规划,如系统参数调整(如系统内核参数调整),网络及主机名配置、创建用户组及相应目录,设置属组和权限、安装软件依赖包等。

第二步,下载安装包:这一步是到官网下载相应版本源码安装包,进行如MD5校验,上传软件包至服务器指定目录。

第三步,编译安装:这一步通常是使用如configure执行编译,然后执行make及make install进行安装。

第四步,初始启动数据库:待上述编译安装后,这一步执行initdb方式初始化数据库,然后启动并创建数据库等。

接下来,我们将按照上述四步编译安装V16.1版本PostGreSQL数据库。

二、环境准备

2.1 环境规划

服务器主机名xxx-xxx
公共IP地址192.168.xxx.xxx
操作系统版本CentOS Linux release 7.9.2009 (Core)
数据库版本PostGreSQL 16.1

2.2 关闭防护墙

# 使用 root用户执行
systemctl status firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service

2.3 关闭selinux

# 使用 root用户执行
sed -i  "s/SELINUX=enforcing/SELINUX=disabled/"  /etc/selinux/config
setenforce 0  -- 临时关闭selinux

2.4 调整内核参数

# 使用 root 用户执行
-- 以下提供参考示例,请根据实际操作系统内存大小调整相应参数
cat > /etc/sysctl.conf <<"EOF"
vm.swappiness=10
vm.zone_reclaim_mode=0
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmmax = xxxx
kernel.shmall = xxxx
kernel.shmmni = xxxx
kernel.sem = 50100 64128000 50100 1280
EOF

-- 执行如下命令生效
sysctl -p

cat >> /etc/security/limits.conf <<"EOF" 
* soft nofile 131072
* hard nofile 131072
* soft nproc 131072
* hard nproc 131072
* soft core unlimited
* hard core unlimited
* soft memlock 50000000
* hard memlock 50000000
EOF

2.5 创建用户及组

-- 使用root用户执行
/usr/sbin/groupadd -g 1000 postgres
/usr/sbin/useradd -u 1001 -g postgres -G postgres postgres
echo "postgres" | passwd --stdin postgres

2.6 创建目录

-- 使用root用户执行
mkdir -p /db/postgresql/{pg16,pgdata,,soft}
chown -R postgres:postgres /db/postgresql
chmod -R 775 /db/postgresql
# 各目录具体含义如下
-- /db/postgresql/pg16 表示PostGreSQL安装目录
-- /db/postgresql/pgdata 表示数据库数据存放目录
-- /db/postgresql/pgdata 表示用于临时存放PostGreSQL源码包目录

2.7 安装python3

# root用户执行【所有节点】
-- 安装依赖包
[root@xsky-node4 ~]# yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
-- 创建安装目录
[root@xsky-node4 ~]# mkdir /usr/local/python3
[root@xsky-node4 ~]# cd /home/soft
-- 如服务器可以连接网络,可通过wget获取安装包,如无法联网,可下载安装包并上传至服务器
[root@xsky-node4 ~]# wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz
-- 解压源码包
[root@xsky-node4 ~]# tar xvJf Python-3.6.10.tar.xz
[root@xsky-node4 ~]# cd Python-3.6.10
-- 配置编译参数
[root@xsky-nodexxx Python-3.6.10]# ./configure --prefix=/usr/local/python3 --enable-optimizations --enable-shared CFLAGS=-fPIC --with-ssl
-- 执行安装
[root@xsky-node4 ~]# make && make install
-- 创建链接
[root@xsky-node4 ~]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
-- 检验python版本
[root@xsky-node4 ~]# python3
Python 3.6.8 (default, Nov 14 2023, 16:29:52) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

2.8 安装数据库依赖包

# 源码安装PostGreSQL时,如下软件包是必须的
1) GUN make 3.80及以上版本,查看GUN make版本:make --version
2) ISO/ANSI C 编译器(gcc)
3) tar及gzip或bzip2:用以解压数据库源码压缩包;
4) 默认使用GUN Readline库:该库允许psql记录SQL命令,并可以使用上下键选择及编辑之前使用的命令。建议使用该软件,但如果不想使用,可在configure时,指定--without-readline
5) 默认使用zlib压缩库,支持pg_dump和pg_restore的压缩归档,如不想使用,可configure时指定--without-zlib

# 使用如下命令安装上述软件依赖包
yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib zlib-devel python3-devel

三、下载安装包

3.1 下载安装包

登录PostGreSQL官网下载地址:https://www.postgresql.org/download/,然后点击 “Source”,如下所示。

image20240101202920858.png

然后进入到如下页面,如下所示。

image20240101203100414.png

然后点击选择最上端的 v16.1,进入如下页面。

image20240101203210597.png

此处选择下载postgresql-16.1.tar.gz,并点击postgresql-16.1.tar.gz.md5查看postgresql-16.1.tar.gz的md5值。

3.2 md5校验软件包

使用postgres用户将下载的postgresql-16.1.tar.gz源码安装包上传到数据库服务器/db/postgresql/soft目录下,并进行md5校验对比官网md5值是否相同。

# 使用如下命令进行md5校验,并和官网软件包md5值进行比对
[postgres@xsky-node4 soft]$ ll
total 31676
-rw-r--r-- 1 postgres postgres 32433767 Jan  1 16:22 postgresql-16.1.tar.gz
[postgres@xsky-node4 soft]$ md5sum postgresql-16.1.tar.gz 
708b5fee32a7dbdc80c8ce1dc2d70cd0  postgresql-16.1.tar.gz

四、编译安装

使用postgres用户解压下载的postgresql-16.1.tar.gz源码安装包,并执行编译安装,详细命令如下。

# 使用postgres解压安装包
1) 解压安装包
[root@xsky-node4 ~]# su - postgres
Last login: Mon Jan  1 20:47:58 CST 2024 on pts/1
[postgres@xsky-node4 ~]$ cd /db/postgresql/soft/
[postgres@xsky-node4 soft]$ tar -zxf postgresql-16.1.tar.gz 

2)运行configure
[postgres@xsky-node4 soft]$ cd postgresql-16.1/
[postgres@xsky-node4 postgresql-16.1]$ ./configure --prefix=/db/postgresql/pg16/ --with-pgport=5433 --with-perl --with-python

# 以上参数相关含义如下:
--prefix 指定源码安装目录
–with-pgport 指定psql端口
–with-perl 指定使用Perl语法的PL/Perl语言编写自定义函数
--with-python 指定使用Python语法的PL/Python语言编写自定义函数

3) 执行make
[postgres@xsky-node4 postgresql-16.1]$ make

4) 执行make install
-- 待make执行完毕,无error报错信息,然后执行make install
[postgres@xsky-node4 postgresql-16.1]$ make install

五、初始启动数据库

5.1 设置环境变量

设置postgres用户环境变量,使用postgres用户编辑/home/postgres/.bash_profile文件,设置如下内容。

[root@xsky-node4 ~]# su - postgres
[postgres@xsky-node4 ~]$ cat >>  ~/.bash_profile <<"EOF"
export LANG=en_US.UTF-8
export PGPORT=5433
export PGDATA=/db/postgresql/pgdata
export PGHOME=/db/postgresql/pg16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export DATE=`date +"%Y%m%d%H%M"`
export PGHOST=$PGDATA
EOF

# 上述环境变量各参数含义如下
LANG: 设定语言为美式英语(UTF-8编码)
PGPORT: 设置 PostgreSQL 服务器监听的端口为 5433
PGDATA: 指定数据库存储位置为 /db/postgresql/pgdata
PGHOME: 设置 PostgreSQL 安装目录为 /db/postgresql/pg16
LD_LIBRARY_PATH: 设置动态链接库的搜索路径
MANPATH: 设置 PostgreSQL 手册所在路径。
PGHOST: 将PostgreSQL 数据库服务器地址设为本地

-- 执行source  ~/.bash_profile生效环境变量
[postgres@xsky-node4 ~]$ source  ~/.bash_profile

5.2 初始化数据库

# 使用postgres用户执行
[postgres@xsky-node4 ~]$ /db/postgresql/pg16/bin/initdb -D /db/postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

-- 执行结果如下
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /db/postgresql/pgdata ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /db/postgresql/pg16/bin/pg_ctl -D /db/postgresql/pgdata -l logfile start

5.3 修改配置文件参数

主要是修改postgresql.conf及pg_hba.conf两个配置文件

-- postgresql.conf 这个文件包含了 PostgreSQL 服务器的全局配置信息,可以控制诸如连接数量、日志记录、监听地址和端口等服务器行为,它影响整个 PostgreSQL 实例的运行
-- pg_hba.conf: 这个文件定义了客户端如何通过认证方式来连接到 PostgreSQL 数据库服务器,规则可以看作是一种访问的“白名单”或“黑名单”。

# 使用PostGreSQL用户进行修改
1) 修改postgresql.conf配置文件, 内容如下
[postgres@xsky-node4 ~]$ cat >> /db/postgresql/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5433
unix_socket_directories='/db/postgresql/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%m-%d.log'
log_truncate_on_rotation = on
EOF

-- 上述配置文件各参数具体含义如下:
listen_addresses = '*': 允许服务器监听所有可用的网络接口,允许远程连接
port=5433: PostgreSQL 数据库监听的端口号为 5433。
unix_socket_directories='/db/postgresql/pgdata': 指定 Unix 域套接字文件的目录位置
logging_collector = on: 开启日志收集器,用于收集数据库服务器的日志信息
log_directory = 'pg_log': 日志文件的存储目录为 'pg_log'
log_filename = 'postgresql-%m-%d.log': 设置会使日志文件名包含月份和日期信息
log_truncate_on_rotation = on: 在日志轮转时清空旧日志文件

2) 修改pg_hba.conf配置文件, 内容如下
cat   > /postgresql/pgdata/pg_hba.conf << EOF
# TYPE  DATABASE    USER    ADDRESS       METHOD
host      all       all    0.0.0.0/0        md5
EOF

-- 上述配置文件具体含义如下:
TYPE: 指定认证的类型,这里是host,表示针对主机的连接。
DATABASE: 指定数据库名称,这里是all,表示适用于所有数据库。
USER: 指定数据库用户,这里也是all,表示适用于所有用户。
ADDRESS: 指定允许连接的主机地址,0.0.0.0/0表示允许来自任何IP地址的连接。
METHOD: 指定认证的方式,这里使用的是md5,表示使用MD5加密的密码验证方式。

5.4 启动数据库

-- 根据上面初始化后提供的启动数据库命令执行如下:
[postgres@xsky-node4 ~]$  /db/postgresql/pg16/bin/pg_ctl -D /db/postgresql/pgdata -l logfile start
-- 执行结果如下
waiting for server to start.... done
server started

-- 也可以使用更简洁的启动方式如下所示:
[postgres@xsky-node4 ~]$  pg_ctl start
waiting for server to start....2024-01-02 10:03:18.980 CST [9568] LOG:  redirecting log output to logging collector process
2024-01-02 10:03:18.980 CST [9568] HINT:  Future log output will appear in directory "pg_log".
 done
server started

-- 查看端口号
[postgres@xsky-node4 ~]$ netstat -ano|grep 5433
tcp        0      0 0.0.0.0:5433            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      1 192.168.73.19:38775     10.110.7.60:5433        SYN_SENT    on (0.29/0/0)
tcp        0      1 192.168.73.19:38771     10.110.7.60:5433        SYN_SENT    on (0.29/0/0)
tcp        0      1 192.168.73.19:38773     10.110.7.60:5433        SYN_SENT    on (0.29/0/0)
tcp6       0      0 :::5433                 :::*                    LISTEN      off (0.00/0/0)
unix  2      [ ACC ]     STREAM     LISTENING     2500024418 /db/postgresql/pgdata/.s.PGSQL.5433

-- 查看数据库状态
[postgres@xsky-node4 ~]$  pg_ctl status
pg_ctl: server is running (PID: 9568)
/db/postgresql/pg16/bin/postgres

-- 可以使用如下两种方式查看数据库版本
postgres --version
psql --version

-- 停止数据库可使用psql stop命令
[postgres@xsky-node4 ~]$  pg_ctl stop
waiting for server to shut down.... done
server stopped

-- 使用psql连接数据库
[postgres@xsky-node4 ~]$  psql
psql (16.1)
Type "help" for help.

postgres=# \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges  
 
-----------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------
-
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          
+
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          
+
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
(3 rows)

postgres=# 

复制

接下来就可以正常使用数据库进行验证测试了。

六、附录

6.1 安装Python3

安装python3主要是因为操作系统默认python版本是2.7,在编译PostGreSQL时会提示系统自带python版本较老,另外编译python3时,建议添加参数CFLAGS=-fPIC。

CFLAGS=-fPIC 中的 -fPIC 表示生成位置独立的代码(Position Independent Code),这在编译动态链接库(Shared Library)时非常重要。这个标志告诉编译器生成与位置无关的代码,这样代码可以加载到内存的任何位置而不会出现问题。通常在创建共享库时需要使用 -fPIC 标志,因为它允许动态库在内存中加载到不同的位置,从而减少了地址冲突的可能性。

标签:PostgreSQL,postgres,--,数据库,xsky,源码,postgresql,安装,node4
From: https://blog.csdn.net/shlei5580/article/details/144347984

相关文章

  • 在 Debian 中使用 APT 包管理工具通过 Ubuntu PPA 安装最新软件包
    在Debian中使用APT包管理工具通过UbuntuPPA安装最新软件包Neovim0.10.0在24年5月发布了.考虑许久后笔者决定试着从Vim9转向Neovim.其中遇到的第一个问题是,Debian的默认源里只有Neovim0.7.7,因此寻找下载最新软件包的方法,并做下详细记录.虽然本文初衷......
  • 基于SpringBoot和Vue框架的学生德育成绩管理系统的设计与实现-毕业设计源码00782
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 系统......
  • 同城拼车系统:Java源码构建与优化
    同城拼车系统是一个复杂的软件系统,它利用互联网技术将具有相同出行需求的乘客和车主进行匹配,实现资源共享、降低出行成本、减少交通拥堵并提高效率。Java作为一种强大的编程语言,非常适合用于开发这样的系统。以下是对同城拼车系统Java源码构建与优化的详细探讨:一、Java源码构......
  • Linux下Mosquitto MQTT代理的安装与配置指南
    1.引言MQTT(MessageQueuingTelemetryTransport)是一种轻量级的、基于发布/订阅模式的消息传输协议,广泛应用于物联网(IoT)领域。Mosquitto是一个开源的MQTT代理,它支持MQTT协议3.1和3.1.1,适用于各种设备和平台。本文将详细介绍如何在Linux系统下安装和配置MosquittoMQTT代理。......
  • 渗透利器-kali工具 (第四章-1) Python环境安装与基本语法
    学习python环境安装和基础语法[变量、函数]为什么要学习Python?提高工作效率,payload、exp、爬虫、fuzz等。1,安装python环境和编码工具:1.python2还是python3:很多都会纠结应该选择python2,还是python3版本的问题。我觉的世界的变化的速度在变得更快,语......
  • 深入源码:Spring Boot 内置 Tomcat 的实现机制分析
     在本文章中,我们将从源码层面深入分析SpringBoot如何实现内置Tomcat的功能。通过对相关代码的剖析,我们将揭示内置Tomcat的工作原理以及其在SpringBoot应用中的集成方式。这一过程不仅有助于理解SpringBoot的设计思路,还能为开发者在实际应用中提供更深入的见解。......
  • 深入源码解析:Spring Boot 如何加载 Servlet 、Filter 与 Listener
     我们知道,SpringBoot是在SpringMVC的基础上进行了封装,以简化开发者的工作量。尽管如此,SpringBoot的底层架构依然离不开SpringMVC的核心组件,如Servlet、Filter、Listener,以及RequestMappingHandlerMapping和RequestMappingHandlerAdapter等。 在传统的Spring......
  • 基于SpringBoot+Vue的茶叶商城系统的设计与实现(源码+lw+部署+讲解)
    文章目录1.前言2.详细视频演示3.具体实现截图4.技术可行性分析5.技术简介5.1后端框架SpringBoot5.2前端框架Vue5.3系统开发平台6.系统架构设计7.程序操作流程8.业务流程设计9.为什么选择我们9.1自己的公众号9.2海量实战案例10.代码参考11.数据库参考12.源码及文档获取......
  • 基于SpringBoot+Vue的在线考试系统的设计与实现(源码+lw+部署+讲解)
    文章目录1.前言2.详细视频演示3.具体实现截图4.技术可行性分析5.技术简介5.1后端框架SpringBoot5.2前端框架Vue5.3系统开发平台6.系统架构设计7.程序操作流程8.业务流程设计9.为什么选择我们9.1自己的公众号9.2海量实战案例10.代码参考11.数据库参考12.源码及文档获取......
  • Docker Ubuntu 上安装 ssh 和连接 ssh
    Docker安装Ubuntu首先从云上拉取ubuntu的镜像dockerpullubuntu使用dockerimages或dockerimagels查看刚才摘取下来的镜像如上图示镜像ID为b1d9df8ab815启动镜像输入命令dockerrun-itd-p6789:22b1d9df8ab815,表示在后台启动镜像,并将本机的6789......