tlinux 3.1 安装 postgresql 13.x
TencentOS Server 是腾讯公司自主研发的定制化服务器操作系统。该系统集成了众多服务
器系列的优点,加入自主研发的软件,便于用户操作使用,提供全方位(内核及用户态)的
操作系统支持。
系统特点:安全、易用、稳定、快速、长久支持。安装镜像提供了服务器常用的各种软件支持,同时可以使用线上软件源安装及更新软件。此说明适用于 Tencent OS Server 2.4 发行版与 3.1 发行版的安装与使用,本文中以 Tencent OS Server 3.1 环境为例,讲解 PostgreSQL 13.x 版本的安装。
$1 | 前提条件
为了安装软件包,你需要以 root 或者其他有 sudo 权限的用户身份登录系统。
$2 | 安装步骤
- 2.1 列出可用的 PostgreSQL 模块
dnf module list postgresql
输出显示结果,postgresql 有4个版本。每个版本都有两个部分:服务器和客户端。 服务器版本 10,是默认的版本:
[root@TENCENT64 ~]# dnf module list postgresql
Last metadata expiration check: 0:01:22 ago on Fri 28 Jan 2022 05:14:05 PM CST.
TencentOS Server 3.1 - AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
TencentOS Server 3.1 - TencentOS-AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
postgresql 13 [e] client, server [d] [i] PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
- 2.2 安装服务器版本 13,输入:
sudo dnf install @postgresql:13
- 2.3 你可能还想安装 contrib 包,它们给 PostgreSQL 数据库提供一些额外的特性:
sudo dnf install postgresql-contrib
- 2.4 一旦安装完成,使用下面的命令初始化 PostgreSQL 数据库:
sudo postgresql-setup initdb
...
Initializing database ... OK
可能输出如下提示信息:
[root@TENCENT64 /]# sudo postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
查看 pgsql 初始化日志信息:
vim /var/lib/pgsql/initdb_postgresql.log
initdb_postgresql.log 日志信息:
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.UTF-8".
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.
fixing permissions on existing directory /var/lib/pgsql/data ... 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
Success. You can now start the database server using:
/usr/bin/pg_ctl -D /var/lib/pgsql/data -l logfile start
- 2.5 启动 PostgreSQL 服务,并且启用开机启动 PostgreSQL 服务。
sudo systemctl enable --now postgresql
- 2.6 验证安装结果,使用 psql 工具连接 PostgreSQL 数据库服务器并且打印它的版本号。
sudo -u postgres psql -c "SELECT version();"
输出显示结果:
[root@TENCENT64 ~]# sudo -u postgres psql -c "SELECT version();"
could not change directory to "/root": Permission denied version
------------------------------------------------------------------------------------------------------------
PostgreSQL 13.3 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1), 64-bit
(1 row)
$3 | PostgreSQL 角色和身份认证方法
PostgreSQL 支持多种身份认证方法。最常用的方法如下:**trust、password、ident、peer **
auth-method :指定当一个连接匹配这个记录时,要使用的认证方法。
更多详细请查看 => https://www.w3cschool.cn/postgresql13_1/postgresql13_1-z9af3jew.html
- trust:无条件地允许连接。允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意 PostgreSQL 数据库用户身份登入,而不需要口令或者其他任何认证。
- reject:无条件地拒绝连接。这有助于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。
- scram-sha-256:执行SCRAM-SHA-256认证来验证用户的口令。
- md5:要求客户端提供一个 md5加密的口令进行认证,这个方法是允许加密口令存储在 pg_shadow 里的唯一的一个方法。
- password:要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。
- gss:用 GSSAPI 认证用户。只对 TCP/IP 连接可用。它可以与 GSSAPI 加密一起结合使用。
- sspi:用 SSPI 来认证用户。只在 Windows 上可用。
- ident:通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。
- peer:通过从内核获得客户端的操作系统用户名并把它用作被允许的数据库用户名(和可选的用户名映射)来工作。和 Ident 一样,这种方法只在本地连接上支持。
- ldap:使用LDAP服务器认证。
- radius:用 RADIUS 服务器认证。
- cert:使用 SSL 客户端证书认证。
- pam:使用操作系统提供的可插入认证模块服务(PAM)认证。
- bsd:使用由操作系统提供的 BSD 认证服务进行认证。
PostgreSQL 客户端身份验证(访问控制)通常被定义在 pg_hba.conf 文件中。默认情况下,对于本地连接,PostgreSQL 被设置成身份认证防范 peer。
为了以 postgres 用户身份登录 PostgreSQL 服务器,首先切换用户,然后使用 psql 工具访问 PostgreSQL。
sudo su - postgres
psql
或者使用 sudo 命令访问 PostgreSQL:
sudo -u postgres psql
注意:postgres 用户仅仅在本地被使用。
$4 | 创建 PostgreSQL 角色和数据库
仅仅超级用户和拥有 CREATEROLE 权限的角色可以创建新角色。
举例:我们创建一个名称为 chait 的角色,一个名称为 chaitdb 的数据库,并且授予数据库上的权限。
- 4.1 连接到 PostgreSQL shell
sudo -u postgres psql
- 4.2 创建一个新的 PostgreSQL 角色
create role chait
- 4.3 创建一个新的数据库
create database chaitdb
- 4.4 通过下面的查询语句,授予用户在数据库上的所有权限
grant all privileges on database chaitdb to chait
$5 | 启用远程访问 PostgreSQL 服务器
默认情况下,PostgreSQL 服务器仅仅监听本地网络接口:127.0.0.1
为了允许远程访问你的 PostgreSQL 服务器,打开配置文件:
# 查找 postgresql.conf 位置
sudo find postgresql.conf
# 编辑 postgresql.conf 文件
sudo vim /var/lib/pgsql/data/postgresql.conf
/CONNECTIONS AND AUTHENTICATION
往下滑动到 CONNECTIONS AND AUTHENTICATION部分,并且添加或者编辑下面的行:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
保存文件,并且使用下面的命令重启 PostgreSQL 服务:
:wq!
sudo systemctl restart postgresql
使用 ss 工具来验证这个修改:
[root@TENCENT64 /]# ss -nlt | grep 5432
LISTEN 0 244 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 244 [::]:5432 [::]:*
上面的输出显示 PostgreSQL 服务器已经在监听所有网络接口(0.0.0.0)的默认端口。
最后一步是,通过编辑 pg_hba.conf 文件,配置服务器去接受远程连接。下面是一些例子,展示了不同的用户示例:
[root@TENCENT64 /]# ls /var/lib/pgsql/data
base log pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact postmaster.opts
current_logfiles pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf postmaster.pid
global pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_wal postgresql.conf
[root@TENCENT64 /]# sudo vim /var/lib/pgsql/data/pg_hba.conf
pg_hba.conf 默认配置如下:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the replication privilege.
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
修改为如下:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the replication privilege.
local replication all peer
host replication all 0.0.0.0/0 trust
host replication all ::1/128 ident
最后我们用 DBeaver 客户端工具访问链接测试下,如下所示:
$6 | 总结
tlinux 3.1 是基于 RedHat-CentOS-Release 的发行版,默认支持 PostgreSQL 的 9.6/10/12/13 版本,内核信息查看如下:
WARNING! The remote SSH server rejected X11 forwarding request.
Welcome to TencentOS 3 64bit
Version 3.1 20211028
Last login: Fri Jan 28 17:13:06 2022 from 192.168.10.251
[root@TENCENT64 ~]# uname -a
Linux TENCENT64.site 5.4.119-19-0008 #1 SMP Mon Sep 13 14:54:39 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@TENCENT64 ~]# cat /etc/redhat-release
CentOS Linux release 8.4.2105 (Core)
[root@TENCENT64 ~]#
更多 PostgreSQL 版本安装请查看 => https://www.postgresql.org/docs/14/index.html