DevOps丨Alibaba Cloud Linux 3 安装 PostgreSQL 数据库

628 阅读3分钟

由于虚拟机使用的alinux系统,在安装postgresql过程中遇到阻碍性问题,特此记录说明。

安装参考

  1. PostgreSQL 官方网站
  2. 搭建PostgreSQL主从架构
  3. Alibaba Cloud Linux 3系统中使用docker-ce、epel等第三方DNF(YUM)源安装软件失败

安装说明

  1. 参考官网安装步骤,选择下面的版本配置

image.png

由于alinux对齐的el的版本为8,所以第二步选择的时候如图

基本配置

本地登录

[root@prostgresql alinux]# su - postgres
Last login: Tue Feb 20 00:37:07 CST 2024 on pts/0
[postgres@prostgresql ~]$ psql

安装插件

create extension pageinspect
create extension pg_stat_statements
select * from pg_extension
select * from pg_available_extensions order by name

设置密码

alter user postgres with password 'postgres' 或 \password postgres
select * from pg_tables
select version()

创建数据用户和数据库

创建用户
postgres=# create user [dbuser] with password '[****]';
CREATE ROLE

创建用户数据库
postgres=# create database [database] owner [dbuser];

给用户数据库权限
postgres=# grant all privileges on database [database] to [dbuser];

创建linux用户并用验证数据

# adduser dbuser
# passwd dbuser
更改用户 dbuser 的密码 。
新的 密码:
重新输入新的 密码:
# su - ivo
$ psql -d ivo
psql (11.15)
Type "help" for help.

ivo=>

开启远程连接

生产环境最好不要开启!!!

修改监听

# 修改配置文件
vi /var/lib/pgsql/16/data/postgresql.conf
# yy  p  复制一行 #listen_addresses = 'localhost'
# 修改为 listen_addresses = '*'

修改允许访问的IP

vi /var/lib/pgsql/16/data/pg_hba.conf
# 添加下面配置
host  all  all 0.0.0.0/0 md5
# 重启数据库
systemctl restart postgresql-16

记得去配置下安全组规则,数据库端口号默认是5432,在postgresql.conf修改。

其他

这里我改过默认的端口号, 连接的时候要加上 -p

psql -d database -p [port]

问题处理

在符合如下条件的Alibaba Cloud Linux 3系统的ECS实例中,执行sudo dnf install -y postgresql16-server命令安装软件包失败,并出现如下报错。

  • 使用适配CentOS 8系统中的第三方DNF(YUM)源。
  • aliyun_3_x64_20G_alibase_20210425.vhd及之前的所有镜像版本。

系统显示报错信息类似如下。

image.png

问题原因

第三方DNF源仅适配CentOS 8发行版,而在Alibaba Cloud Linux 3中,系统的$releasever变量值与CentOS 8不同,导致DNF解析后的地址无效,进而导致下载RPM包失败。

说明

DNF安装docker-ce时,首先会从系统中获取版本号,即$releasever变量值,然后替换掉相应源baseurl中对应的$releasever变量值,之后DNF从替换后的baseurl中获取相关数据。由于CentOS 8的$releasever变量值为8,而Alibaba Cloud Linux 3系统的$releasever变量值为3,因此解析后的baseurl并非预期地址,DNF便无法从这个错误的地址中安装软件包。

解决方案

请根据实际需求情况,选择以下对应方案进行修复。

**说明

本文以pgdg-redhat-all.repo源为例进行介绍,如果您使用的是其他DNF源,解决方案类似。

方案一:手动修改

  1. 远程登录Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,打开/etc/yum.repos.d/pgdg-redhat-all.repo配置文件。

    vim /etc/yum.repos.d/pgdg-redhat-all.repo
    
  3. i键进入编辑模式,找到pgdg-redhat-all.repo文件中所有存在enabled=1值的源,将源中baseurl$releasever变量替换为8。

image.png

  1. 按下Esc键后,输入:wq并按Enter键以保存关闭配置文件,重新进行安装即可。

方案二:安装插件修改

通过安装dnf-plugin-releasever-adapter插件实现$releasever的变量进行自动转换,即将3转换为8。

  1. 确认实例是否支持使用dnf-plugin-releasever-adapter插件。

    dnf-plugin-releasever-adapter插件目前的版本及默认支持的第三方repo如下表所示:

    image.png

  2. 远程登录Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  3. 执行以下命令,安装dnf-plugin-releasever-adapter插件。

    目前,插件默认对docker-ce和epel源中的$releasever变量值做自动转换。

    dnf install dnf-plugin-releasever-adapter --repo alinux3-plus
    
  4. 若无其他的DNF源需要转换,安装插件后即可直接安装软件;若还有其他的DNF源需要转换,请按照以下方式配置:

    a. 执行以下命令,进入/etc/yum/pluginconf.d/目录。

    cd /etc/yum/pluginconf.d/
    

    b. 执行以下命令,编辑releasever_adapter.conf配置文件。

    vim releasever_adapter.conf
    

    d. 按i键切换至编辑模式,如果需要添加其他的DNF源,则需要将DNF源的.repo文件名添加在include字段后面,并以逗号隔开。

    说明: DNF源的.repo文件一般在/etc/yum.repos.d/目录下查看。

    系统显示类似如下。

    [main]
    enabled=1
    
    [releasevermapping]
    2.1903 = 7
    3      = 8
    
    [reposlist]
    include=docker-ce.repo, epel.repo
    

说明

  • 文件中参数的具体介绍如下所示:
  • [main]:此部分为插件的主要控制部分,控制插件的启用与否,其中enabled=1表示启用插件,enabled=0表示停用插件。
  • [releasevermapping]:此部分为待处理的$releasever的映射关系,其中2.1903映射为7,3映射为8。
  • [repolist]:此部分为需要修改的源的列表,如果需要添加其他的源,则需要将.repo文件的名字添加在include字段后面,并以逗号隔开。
  • 一般来说,一个.repo文件中有多个可以使用的源,每个源都有一个独立的名称区分其他的源,一个系统中不能出现重复的名称,例如:docker-ce.repo中有[docker-ce-stable][docker-ce-stable-debuginfo]等源。
  1. 修改完成后,按下Esc键,然后输入:wq并按回车,保存并关闭配置文件。

  2. 执行如下命令,通过docker-ce、epel和您添加的源安装docker-ce软件。

    sudo dnf install -y postgresql16-server