从零开始学PostgreSQL (四) & Linux 源码编译安装 PostgreSQL
在许多系统上,GSSAPI 系统(通常是 Kerberos 安装的一部分) 并未安装在默认搜索的位置(例如,/usr/include、 /usr/lib),因此除此选项外,您还必须使用选项 --with-includes和–with-libraries。这样做显著增大了最后安装的可执行文件的大小,并且在非 GCC 的编译器上,这么做通常还要关闭编译器优化, 这些都导致速度的下降。:这是一个目录,包
文章目录
一、源码安装
1.1 下载并解压安装包
第一步:访问PostgreSQL官网
官网地址:https://www.postgresql.org/
第二步:点击Download进入下载页面。
第三步:点击Source进入源码包下载页面。
第四步:根据自己的版本需求选择相应版本的源码包
这里我们选择的是最新的16.1版本。
选择tar.gz压缩包
第五步:将下载后的压缩包上传到服务器上,并对压缩包进行解压。
注意:
1、如果实在互联网环境下,可以使用wget命令来进行下载。
[root@VM-16-10-centos opt]# wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz --no-check-certificate
2、这里我们是存在于/opt目录下。
[root@VM-16-10-centos opt]# pwd
/opt
[root@VM-16-10-centos opt]# ll
total 31684
drwxr-xr-x 4 root root 4096 Jan 14 18:27 mellanox
-rw-r--r-- 1 root root 32433767 Nov 7 06:19 postgresql-16.1.tar.gz
drwxr-xr-x. 2 root root 4096 Oct 31 2018 rh
# 解压PostgreSQL源码包
[root@VM-16-10-centos opt]# tar -zxvf postgresql-16.1.tar.gz
[root@VM-16-10-centos opt]# ll
total 31688
drwxr-xr-x 4 root root 4096 Jan 14 18:27 mellanox
drwxrwxrwx 6 1107 1107 4096 Nov 7 06:18 postgresql-16.1 # 这就是我们需要的解压之后的源码包
-rw-r--r-- 1 root root 32433767 Nov 7 06:19 postgresql-16.1.tar.gz
drwxr-xr-x. 2 root root 4096 Oct 31 2018 rh
进入到解压后的源码包下
[root@VM-16-10-centos opt]# cd postgresql-16.1/
[root@VM-16-10-centos postgresql-16.1]# ll
total 876
-rw-r--r-- 1 1107 1107 365 Nov 7 06:04 aclocal.m4
drwxrwxrwx 2 1107 1107 4096 Nov 7 06:17 config
-rwxr-xr-x 1 1107 1107 584560 Nov 7 06:04 configure
-rw-r--r-- 1 1107 1107 87292 Nov 7 06:04 configure.ac
drwxrwxrwx 61 1107 1107 4096 Nov 7 06:17 contrib
-rw-r--r-- 1 1107 1107 1192 Nov 7 06:04 COPYRIGHT
drwxrwxrwx 3 1107 1107 4096 Nov 7 06:17 doc
-rw-r--r-- 1 1107 1107 4288 Nov 7 06:04 GNUmakefile.in
-rw-r--r-- 1 1107 1107 277 Nov 7 06:04 HISTORY
-rw-r--r-- 1 1107 1107 64601 Nov 7 06:18 INSTALL
-rw-r--r-- 1 1107 1107 1875 Nov 7 06:04 Makefile
-rw-r--r-- 1 1107 1107 102017 Nov 7 06:17 meson.build
-rw-r--r-- 1 1107 1107 6266 Nov 7 06:04 meson_options.txt
-rw-r--r-- 1 1107 1107 1213 Nov 7 06:04 README
drwxrwxrwx 16 1107 1107 4096 Nov 7 06:18 src
解释一下源码包中内容各自的作用:
aclocal.m4:该文件包含在构建过程中由
autoconf
工具使用的宏。这些宏有助于配置构建环境。 config:这个目录包含在构建过程中使用的配置文件和脚本。
configure:这是由
autoconf
工具生成的可执行脚本。用于配置源代码以适应目标系统。 configure.ac:这是
autoconf
工具用于生成configure脚本的源文件。包含配置信息和脚本。 contrib:这是一个目录,包含一些附加模块、插件或扩展,它们不是核心PostgreSQL系统的一部分,但可以添加到系统中以提供额外的功能。
COPYRIGHT:版权文件,包含有关软件版权的信息。
doc:这是一个目录,包含有关PostgreSQL的文档,如手册、帮助文件等。
GNUmakefile.in:这是用于构建过程的GNU Make文件的模板。
HISTORY:包含PostgreSQL版本历史的文件。
INSTALL:安装说明文件,提供有关如何安装PostgreSQL的信息。
Makefile:用于构建和安装过程的Makefile。
meson.build 和 meson_options.txt:这些文件与 Meson Build System 相关,用于构建系统的配置。
README:包含有关如何使用源代码的基本信息。
src:这是一个目录,包含PostgreSQL数据库管理系统的源代码文件。这是构建数据库服务器的核心代码。
1.2 安装依赖包
PG依赖包安装命令:
这里分为两种情况:
- 有网络环境,可通过执行yum install 命令来安装相关依赖
- 内网环境,无法通过yum进行安装依赖包的情况
第一种情况:有互联网网络环境,执行下面命令即可
[root@VM-16-10-centos postgresql-16.1]# yum install -y readline readline-devel zlib zlib-devel bison bison-devel flex perl-ExtUtils-Embed perl-devel \
openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel tcl tcl-devel \
openldap openldap-devel python python-devel gcc gcc-c++ rsync icu libicu-devel \
e2fsprogs-devel uuid uuid-devel libuuid-devel lz4 lz4-devel epel-release
第二种情况:内网环境,无法联通网络环境。
相关依赖包:https://www.aliyundrive.com/s/uLwRnqHHB7N
将网盘中的文件夹下载后,上传至无法连通网络的服务器上。
进入该文件夹下,执行下列命令进行安装文件夹下的依赖包
rpm -ivh --force --nodeps *.rpm
需要特别注意的是,PG15及以上版本需要安装关于 Python3+ 的相关依赖包
- python3 python3-devel
1.3 预编译
进行预编译操作
[root@VM-16-10-centos postgresql-16.1]# ./configure --prefix=/usr/local/postgres/ --with-pgport=54335 --with-lz4 --with-systemd --with-libxml --enable-debug --with-tcl --with-perl --with-gssapi --with-pam --with-openssl --without-ldap --with-libxml --with-libxslt
./configure参数解释:
–prefix 参数是指定编译安装的目录;
–with-pgport 是指定psql的端口,通常为5432
–with-lz4 支持 LZ4 压缩构建。 使用 LZ4 压缩表数据。
–with-systemd 编译对systemd 服务通知的支持。如果服务器是在systemd 机制下被启动,这可以提高集成度,否则不会有影响。要使用这个选项,必须安装libsystemd 以及相关的头文件。
–with-libxml 使用 libxml2 构建,启用 SQL/XML 支持。 此功能需要 Libxml2 版本 2.6.23 或更高版本。
–enable-debug 把所有程序和库以带有调试符号的方式编译。这意味着你可以通过一个调试器运行程序来分析问题。 这样做显著增大了最后安装的可执行文件的大小,并且在非 GCC 的编译器上,这么做通常还要关闭编译器优化, 这些都导致速度的下降。但是,如果有这些符号的话,就可以非常有效地帮助定位可能发生问题的位置。目前,我们只是在你使用 GCC 的情况下才建议在生产安装中使用这个选项。
–with-tcl 制作PL/Tcl服务器编程语言。
–with-perl 制作PL/Perl服务器端编程语言。
–with-gssapi 构建支持 GSSAPI 身份验证。在许多系统上,GSSAPI 系统(通常是 Kerberos 安装的一部分) 并未安装在默认搜索的位置(例如,/usr/include、 /usr/lib),因此除此选项外,您还必须使用选项 --with-includes和–with-libraries。 configure将检查所需的头文件和库,以确保您的 GSSAPI 安装足够,然后再继续。
–with-pam 使用PAM(可插拔身份验证模块)支持构建。
–with-openssl 相当于以前的 --with-ssl=openssl.
–with-ldap 为认证和连接参数查找编译LDAP支持
–with-libxml 使用 libxml2 构建,启用 SQL/XML 支持。 此功能需要 Libxml2 版本 2.6.23 或更高版本。
–with-libxslt 使用 libxslt 构建,使xml2模块能够执行 XML 的 XSL 转换。 --with-libxml也必须指定。
1.4 进行编译安装
进行编译,安装Postgresql
# 编译时间大概为三五分钟的样子。
[root@VM-16-10-centos postgresql-16.1]# make
# 如果编译出错之后再编译可以先执行命令删除之前的编译文件
make distclean
[root@VM-16-10-centos postgresql-16.1]# make install
1.5 创建用户及用户组
创建用户和用户组
[root@VM-16-10-centos ~]# groupadd -g 2000 postgres
[root@VM-16-10-centos ~]# useradd -g 2000 -u 2000 postgres
[root@VM-16-10-centos ~]# id postgres
[root@VM-16-10-centos ~]# groupmod -g 2000 postgres
[root@VM-16-10-centos ~]# usermod -u 2000 -g 2000 postgres
1.6 创建目录及授权
# 创建相关目录
[root@VM-16-10-centos ~]# mkdir -p /data/pgdata/{data,backups,scripts,archive_wals}
[root@VM-16-10-centos ~]# mkdir -p /data/pgdata/pg_wal
# 授权给postgres用户
[root@VM-16-10-centos ~]# chown -R postgres.postgres /data/pgdata/
[root@VM-16-10-centos ~]# chmod 0700 /data/pgdata/
1.7 设置相关环境变量
# 编辑系统配置文件
[root@VM-16-10-centos ~]# vi /etc/profile
# 数据库安装目录
export PGHOME=/usr/local/postgres
# 数据库存放数据目录
export PGDATA=/data/pgdata/data
export PGLIB=/usr/local/postgres/lib
export LC_ALL=en_US.UTF8
export LANG=en_US.UTF8
PATH=/usr/local/postgres/bin:$PATH
export PATH
# 刷新系统配置文件
[root@VM-16-10-centos ~]# source /etc/profile
1.8 初始化数据库
# 切换到postgres用户
[root@VM-16-10-centos ~]# su - postgres
# 此处需要设置密码
[postgres@VM-16-10-centos ~]$ /usr/local/postgres/bin/initdb -D /data/pgdata/data/ -X /data/pgdata/pg_wal -W
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 database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
Enter new superuser password:
Enter it again:
fixing permissions on existing directory /data/pgdata/data ... ok
fixing permissions on existing directory /data/pgdata/pg_wal ... 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:
/usr/local/postgres/bin/pg_ctl -D /data/pgdata/data/ -l logfile start
1.9 启动和关闭数据库
# 切换到postgres用户
[root@VM-16-10-centos ~]# su - postgres
# 启动数据库
[postgres@VM-16-10-centos ~]$ pg_ctl -D /data/pgdata/data/ -l /data/pgdata/data/logfile start
waiting for server to start.... done
server started
# 停止数据库
[postgres@VM-16-10-centos ~]$ pg_ctl -D /data/pgdata/data/ -l /data/pgdata/data/logfile stop
1.10 查看数据库后台进程
[postgres@VM-16-10-centos ~]$ ps -ef|grep postgres
root 18829 7255 0 13:44 pts/1 00:00:00 su - postgres
postgres 18830 18829 0 13:44 pts/1 00:00:00 -bash
postgres 19474 1 0 13:47 ? 00:00:00 /usr/local/postgres/bin/postgres -D /data/pgdata/data
postgres 19475 19474 0 13:47 ? 00:00:00 postgres: checkpointer
postgres 19476 19474 0 13:47 ? 00:00:00 postgres: background writer
postgres 19478 19474 0 13:47 ? 00:00:00 postgres: walwriter
postgres 19479 19474 0 13:47 ? 00:00:00 postgres: autovacuum launcher
postgres 19480 19474 0 13:47 ? 00:00:00 postgres: logical replication launcher
postgres 19535 18830 0 13:47 pts/1 00:00:00 ps -ef
postgres 19536 18830 0 13:47 pts/1 00:00:00 grep --color=auto postgres
1.11 验证和登陆数据库
[root@VM-16-10-centos ~]# su - postgres
[postgres@VM-16-10-centos ~]$ psql -p 54335 -U postgres -d postgres
psql (16.1)
Type "help" for help.
postgres=#
查看数据库运行状态
[postgres@VM-16-10-centos ~]$ pg_ctl -D /data/pgdata/data/ status
pg_ctl: server is running (PID: 19474)
/usr/local/postgres/bin/postgres "-D" "/data/pgdata/data"
二、修改数据库相关配置
2.1 配置postgresql.conf
数据库实例主配置文件,基本上所有的数据库参数配置都在此文件中。
[root@VM-16-10-centos ~]# # vim /data/pgdata/data/postgresql.conf
listen_addresses = '*' # 监听IP,代表监听所有IP地址
2.2 配置pg_hba.conf
认证配置文件,配置了允许哪些IP访问数据库,及认证方式等信息。
PostgreSQL默认不允许远程访问数据库,可以通过修改监听地址、修改pg_hba.conf文件来实现远程访问。
[root@VM-16-10-centos ~]# vim /data/pgdata/data/pg_hba.conf
# 在IPv4 local connections: 内容的后添加一行
host all all 0.0.0.0/0 md5
三、Postgresql注册服务
如果使用官方yum源或者是官方编译好的rpm包进行安装,会自动配置服务脚本;如果通过源码编译安装,则需要手动配置。
3.1 配置服务脚本
在源码包的contrib目录中有Linux、FreeBSD、OSX适用的服务脚本。将linux的脚本拷贝到/etc/init.d/目录中,将脚本重命名为postgresql,并授予可执行权限。
[root@VM-16-10-centos start-scripts]# pwd
/opt/postgresql-16.1/contrib/start-scripts
[root@VM-16-10-centos start-scripts]# ll
total 12
-rw-r--r-- 1 1107 1107 1441 Nov 7 06:04 freebsd
-rw-r--r-- 1 1107 1107 3526 Nov 7 06:04 linux
drwxrwxrwx 2 1107 1107 4096 Nov 7 06:17 macos
# 复制文件到目标位置
[root@VM-16-10-centos start-scripts]# cp linux /etc/init.d/postgresql-16
# 授予可执行权限
[root@VM-16-10-centos start-scripts]# chmod +x /etc/init.d/postgresql-16
[root@VM-16-10-centos start-scripts]# ll /etc/init.d/postgresql-16
-rwxr-xr-x 1 root root 3526 Jan 17 13:51 /etc/init.d/postgresql-16
修改/etc/init.d/postgresql的内容
将prefix设置为PostgreSQL的安装路径:/usr/local/postgresql
将PGDATA设置为PostgreSQL的数据目录路径:/data/pgdata/data
[root@VM-16-10-centos ~]# vi /etc/init.d/postgresql-16
# Installation prefix
prefix=/usr/local/postgres
# Data directory
PGDATA="/data/pgdata/data"
# 重新加载注册文件
[root@VM-16-10-centos ~]# systemctl daemon-reload
此时已经是加入到systemctl管理了
3.2 验证是否成功注册服务
[root@VM-16-10-centos start-scripts]# systemctl start postgresql-16
[root@VM-16-10-centos start-scripts]# systemctl status postgresql-16
● postgresql-16.service - SYSV: PostgreSQL RDBMS
Loaded: loaded (/etc/rc.d/init.d/postgresql-16; bad; vendor preset: disabled)
Active: active (exited) since Wed 2024-01-17 13:53:54 CST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 21209 ExecStart=/etc/rc.d/init.d/postgresql-16 start (code=exited, status=0/SUCCESS)
Jan 17 13:53:54 VM-16-10-centos systemd[1]: Starting SYSV: PostgreSQL RDBMS...
Jan 17 13:53:54 VM-16-10-centos su[21210]: (to postgres) root on none
Jan 17 13:53:54 VM-16-10-centos postgresql-16[21209]: Starting PostgreSQL: ok
Jan 17 13:53:54 VM-16-10-centos systemd[1]: Started SYSV: PostgreSQL RDBMS.
这样就算是成功了可以使用systemctl来管理Postgresql启动、停止等一系列操作。
四、修改相关密码
4.1 修改用户postgres的密码
PostgreSQL数据库默认创建管理员账号:postgres;修改其密码,仅需一下三步:
1、首先,登录PostgreSQL
[root@VM-16-10-centos ~]# su - postgres
[postgres@VM-16-10-centos ~]$ psql -p 54335 -U postgres -d postgres
psql (16.0)
Type "help" for help.
postgres=#
2、然后,修改账号postgres的密码
postgres=# ALTER USER postgres WITH PASSWORD '修改的密码';
3、最后,退出pgsql客户端
postgres=# exit
4.2 修改linux系统postgres用户的密码
PostgreSQL都会创建一个默认的linux用户postgres,修改该用户密码的方法如下:
1、先删除用户postgres的历史密码
[root@VM-16-10-centos ~]# passwd -d postgres
2、重新设置用户postgres的密码
[root@VM-16-10-centos ~]# sudo -u postgres passwd
3、按照系统提示,输入两次新的密码,即可搞定。
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
更多推荐
所有评论(0)