==========================================
现供职于某上市互联网公司担任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”,如下所示。
然后进入到如下页面,如下所示。
然后点击选择最上端的 v16.1,进入如下页面。
此处选择下载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