openEuler 离线安装PG数据库

因为数据库服务器重装系统,需要重新离线安装PG数据库。这里经过不断的试错,终于将数据库安装完成,记录一下每一步的操作流程。

依赖包下载并安装

经过不断试错,这里选择的方式是使用 DNF 的 downloadonly 插件创建本地仓库。

准备可信任相同系统环境的联网机器

这里我使用同样版本的openEuler在虚拟机搭建了一个新系统。

这一步还是需要的,因为之前我有一个openEuler,不知道是版本问题,还是依赖包的环境与服务器不同。下载下来的rpm包不全,导致报错。

联网机器操作

更新dnf

[root@localhost ~]# sudo dnf check-update  #检查可用的更新
[root@localhost ~]# sudo dnf upgrade   #安装系统更新

安装 createrepo

sudo dnf install -y createrepo

创建仓库目录并下载所有依赖包

mkdir -p ~/local_repo
cd ~/local_repo

# 下载所有必要的包及其依赖,第一次用了这个,好像下载的不行,如果不行换下面的语句
sudo dnf install --downloadonly --downloaddir=. gcc gcc-c++ make readline-devel zlib-devel openssl-devel libxml2-devel ncurses-devel python3-devel tcl-devel libxslt-devel perl-devel perl-ExtUtils-Embed bison flex autoconf patch libtool systemd-devel pam-devel libicu-devel
# 上面rpm下载不全,换这个
dnf download --resolve --alldeps gcc gcc-c++ make readline-devel zlib-devel openssl-devel libxml2-devel

创建本地仓库元数据

createrepo .

打包本地仓库

cd ..
tar -czvf local_pg_repo.tar.gz local_repo

下载 createrepo 包及其依赖

后面发现服务器上没有createrepo 又补了一下。

# 创建下载目录
mkdir -p ~/createrepo_pkgs
cd ~/createrepo_pkgs

# 下载 createrepo 及其所有依赖
sudo dnf install --downloadonly --downloaddir=. createrepo createrepo_c

将下载的包传输到离线服务器

# 打包下载的 RPM 文件
tar -czvf createrepo_pkgs.tar.gz *.rpm

# 然后通过 USB 或其他方式将此文件传输到离线服务器

离线服务器操作

安装createrepo 包

# 解压下载的包
tar -zxvf createrepo_pkgs.tar.gz -C /tmp/
cd /tmp

# 安装包
sudo rpm -ivh --nodeps *.rpm
# 或者尝试
sudo dnf install --nogpgcheck *.rpm

本地仓库配置,安装相关依赖

# 解压本地仓库
tar -zxvf local_pg_repo.tar.gz -C /opt/

# 这里之前我们安装了createrepo,如果有新的rpm加入,就需要重新创建本地仓库元数据。没有就不需要这一步。
createrepo /opt/local-repo/

# 创建本地仓库配置文件
sudo tee /etc/yum.repos.d/local-pg.repo > /dev/null << 'EOF'
[local-pg-repo]
name=PostgreSQL Local Repository
baseurl=file:///opt/local_repo
enabled=1
gpgcheck=0
EOF

# 清理DNF缓存并使用本地仓库安装依赖
sudo dnf clean all
sudo dnf --disablerepo="*" --enablerepo="local-pg-repo" install -y gcc gcc-c++ make readline-devel zlib-devel openssl-devel libxml2-devel

依赖检查

cd postgresql-11.1
./configure --prefix=/usr/local/pgsql

安装数据库

解压PostgreSQL源码

# 创建安装目录
mkdir -p ~/postgresql
cd ~/postgresql

# 解压源码包
tar -zxvf postgresql-11.1.tar.gz
cd postgresql-11.1

配置编译选项

# 基本配置--prefix就是安装路径了
./configure --prefix=/home/soft/pgsql

编译和安装

# 编译
make

# 安装
sudo make install

创建PostgreSQL用户和数据目录

# 创建postgres用户
sudo useradd postgres

# 创建数据目录
sudo mkdir -p /home/soft/pgsql/data
sudo chown postgres:postgres /home/soft/pgsql/data

初始化数据库

# 切换到postgres用户
sudo su - postgres

# 初始化数据库
/home/soft/pgsql/bin/initdb -D /home/soft/pgsql/data -E UTF8 --locale=C

启动数据库服务

# 以postgres用户启动
/home/soft/pgsql/bin/pg_ctl -D /home/soft/pgsql/data -l logfile start

配置环境变量

# 为当前用户配置
echo 'export PATH=$PATH:/home/soft/pgsql/bin' >> ~/.bashrc
echo 'export PGDATA=/home/soft/pgsql/data' >> ~/.bashrc
source ~/.bashrc

# 为postgres用户配置
sudo su - postgres
echo 'export PATH=$PATH:/home/soft/pgsql/bin' >> ~/.bashrc
echo 'export PGDATA=/home/soft/pgsql/data' >> ~/.bashrc
source ~/.bashrc

验证安装

# 以postgres用户登录到PostgreSQL
sudo su - postgres
psql -c "SELECT version();"

这应该显示安装的PostgreSQL 11.1版本信息。

数据库相关配置

打开data目录下,修改相关配置文件

修改postgresql.conf

# 原来可能是localhost
listen_addresses = '*'
# 原来应该是注释状态
password_encryption =md5

修改 pg_hba.conf

# IPv4 local connections: 开启远程连接,和密码登录
host    all         all         0.0.0.0/0         md5

数据库开机自启配置

ai推荐的是创建系统服务文件的方式,但是经过多次调整和测试都不成功。这里我们使用的是使用旧脚本注册 systemd。

PostgreSQL的开机自动启动脚本位于PostgreSQL源码目录下的contrib/start-scripts目录下。linux文件为linux环境下的开机自启动脚本,将其拷贝到“/etc/init.d”目录下,并改名为postgresql。

修改postgresql文件内容

prefix=/home/soft/pgsql
#PGDATA="/home/soft/pgsql/data"
# 将启动用户修改为实际用户,这里使用postgres,所以不变。
PGUSER=postgres
PGLOG="/home/soft/postgresql/log/server.log"

然后修改postgresql文件的执行权限

chmod a+x postgresql

添加开机启动

chkconfig --add postgresql
chkconfig postgresql on

这里我测试以后发现还是不行,查阅资料后,发现问题原因如下:

  • 在 openEuler 和所有 systemd 现代系统中,服务必须是 .service 文件才能使用 systemctl enable 来注册开机启动。
  • /etc/init.d/* 脚本并不是完整的 unit 文件,所以 systemd 拒绝用 enable 注册它。

如果上面成功,编辑 rc.local

sudo vi /etc/rc.d/rc.local

在末尾添加一行(注意路径):

/etc/init.d/postgresql start

赋予执行权限

chmod +x /etc/rc.d/rc.local

确保 rc-local.service 启用并运行

systemctl enable rc-local
systemctl start rc-local

检查状态

systemctl status rc-local

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇