银河麒麟V10的X86架构部署postgresql,解决信创离线部署兼容问题
一、前言
我们经常在迁移java相关服务器至信创服务器时,需要迁移部署数据库postgresql,在离线环境我们不能直接下载部署,也有可能因为权限问题不能使用docker部署,下面就介绍一种离线部署方法.
二、离线部署包下载
PostgreSQL 12(推荐最低版本)
在联网的浏览器输入下面三个地址下载部署包
https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/postgresql12-12.20-1PGDG.rhel8.x86_64.rpmhttps://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/postgresql12-server-12.20-1PGDG.rhel8.x86_64.rpmhttps://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/postgresql12-libs-12.20-1PGDG.rhel8.x86_64.rpm
三、开始部署
1、上传下载的包至服务器
2、执行命令
# 1. 先安装 lib(库文件)
rpm -ivh postgresql12-libs-12.20-1PGDG.rhel8.x86_64.rpm# 2. 再安装主程序
rpm -ivh postgresql12-12.20-1PGDG.rhel8.x86_64.rpm# 3. 最后安装 server(服务端)
rpm -ivh postgresql12-server-12.20-1PGDG.rhel8.x86_64.rpm
3、问题解决
3.1、错误1
[root@zhihuijianzhu postgresql10]# rpm -ivh postgresql12-12.20-1PGDG.rhel8.x86_64.rpm
警告:postgresql12-12.20-1PGDG.rhel8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 08b40d20: NOKEY
错误:依赖检测失败:libreadline.so.7()(64bit) 被 postgresql12-12.20-1PGDG.rhel8.x86_64 需要
问题: 银河麒麟 V10 系统默认提供的是 libreadline.so.8(因为基于较新的 RHEL 8.6+ 或定制版本)
解决:
ln -s /usr/lib64/libreadline.so.8 /usr/lib64/libreadline.so.7
再次执行(跳过依赖检查):
rpm -ivh postgresql12-12.20-1PGDG.rhel8.x86_64.rpm
rpm -ivh postgresql12-server-12.20-1PGDG.rhel8.x86_64.rpm
4、初始化数据库
4.1、执行命令
# 初始化数据库(会自动创建 /var/lib/pgsql/12/data)
/usr/pgsql-12/bin/postgresql-12-setup initdb
问题:
执行/usr/pgsql-12/bin/postgresql-12-setup initdb报错/usr/pgsql-12/bin/postgres: error while loading shared libraries: libicui18n.so.60: cannot open shared object file: No such file or directory
no data was returned by command ""/usr/pgsql-12/bin/postgres" -V"
initdb: 错误: initdb 需要程序 "postgres", 但是在同一个目录 "/usr/pgsql-12/bin/initdb" 中没找到.
银河麒麟 V10 系统默认安装的是更新或更旧版本的 ICU(比如 libicui18n.so.66 或 libicui18n.so.50),缺少 libicu.so.60。
解决:
由于 ICU 62 与 60 在 ABI 上基本兼容(尤其对于 PostgreSQL 的基础功能),我们可以用软链接“伪装”成 ICU 60。
# 创建软链接,让 postgres 认为有 libicu.so.60
ln -sf /usr/lib64/libicui18n.so.62 /usr/lib64/libicui18n.so.60
ln -sf /usr/lib64/libicuuc.so.62 /usr/lib64/libicuuc.so.60
ln -sf /usr/lib64/libicudata.so.62 /usr/lib64/libicudata.so.60
验证软连接是否成功:
ls -l /usr/lib64/libicui18n.so.60
输出
4.2、再次初始化数据库
/usr/pgsql-12/bin/postgresql-12-setup initdb
4.3、如果还是报错处理
如果还是无法执行initdb,则需要直接下载安装 ICU 60 的官方 RPM,不能用软链接,下载libicu-60.3-2.el8_1.x86_64.rpm
下载地址:
https://repo.almalinux.org/almalinux/8/BaseOS/x86_64/os/Packages/libicu-60.3-2.el8_1.x86_64.rpm
执行下面命令
rpm -ivh libicu-60.3-2.el8_1.x86_64.rpm
删除原来软连接
rm -f /usr/lib64/libicu*.so.60
再次执行初始化initdb,基本就可以了.