开源筑基 稳健发展丨OurBMC社区 2024 扬帆起航正当时
开源筑基 稳健发展丨OurBMC社区 2024 扬帆起航正当时
> 本文作者:颜少安,IvorySQL 贡献者。 > 本文为授权转载。
2024 年 8 月,我在《PG 12 即将退役,建议升级到 16.4》一文中提到,PostgreSQL 12 版本即将“停运”。而后,2024 年 11 月,PostgreSQL 12.22 发布,这也是 PG 12 最后一个小版本,标志着这个版本的生命周期即将结束。建议升级到更高版本,比如 IvorySQL 4.0。
近期,基于 PostgreSQL 17 的《IvorySQL 4.0 正式发布》,为用户带来了更多新特性和性能提升,并继续增强 Oracle 兼容性。
IvorySQL 项目紧跟 PostgreSQL 的发布节奏,计划每季度发布一个最新内核的小版本。
2025 年发布路线图如下:
在未来的版本规划中,IvorySQL 或将支持 MySQL 模式。
本文将详细演示如何在 Rocky Linux 9 系统上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的步骤和注意事项,为需要完成数据库升级和迁移的用户提供一些参考。
在进行数据库升级时,通常有以下两种常见的跨大版本升级方案:
在新环境(包括但不限于主机硬件、操作系统)新建数据库,通过导入导出工具 pg_dumpall 或 ETL/CDC 迁移工具将数据从现有环境迁移到新环境。这种方法的优点是可以在不影响现有业务的情况下进行升级,风险相对较低。缺点是需要额外的硬件和网络资源来搭建新环境。此外,迁移完成后还需要对新环境进行一系列的配置和优化,以确保其能够满足业务需求。
在现有环境通过 pg_upgrade 工具进行原地升级,只升级数据库版本,不考虑服务器硬件和操作系统的升级。这种方法的优点是不需要额外的硬件资源,升级过程相对简单。缺点是升级过程中可能会对现有业务造成一定的影响,存在一定的风险。此外,原地升级对数据库版本的兼容性要求较高,如果新旧版本之间的差异较大,可能会出现一些兼容性问题。
在选择升级方案时,可以从这几个角度方面进行考虑和对比:数据库数据量大小,对应用停机时间的影响,新版本数据库是否支持现、新软硬件环境,对人员的技能要求和成本控制。
在前文 IvorySQL 4.0 新增支持 Ubuntu 系统中介绍了如何在 Ubuntu 系统安装 IvorySQL 4.0,本小节将演示如何在 Rocky Linux 9 系统安装 IvorySQL 4.0 数据库。
Rocky Linux 是 Red Hat Enterprise Linux 的开源兼容版本,具有良好的稳定性和兼容性。在之前的文章《在 Rocky9 上安装 PostgreSQL15 的五种方法》中介绍过在 Rocky Linux 系统上安装 PostgreSQL 数据库有几种方法,当然这些方法同样适用于 IvorySQL。在安装 IvorySQL 之前,需要确认操作系统的版本和内核版本,确保其满足 IvorySQL 的安装要求。
[shawnyan@rl9 ~]$ hostnamectl
Static hostname: rl9.shawnyan.cn
Operating System: Rocky Linux 9.5 (Blue Onyx)
Kernel: Linux 5.14.0-503.15.1.el9_5.x86_64
Architecture: x86-64
[shawnyan@rl9 ~]$
IvorySQL 数据库的本地安装方式通常包括:YUM/DNF 源安装、RPM 安装、源码安装、Docker 安装。
接下来以 RPM 安装为例,进行演示。
[shawnyan@rl9 ivorysql4]$ ll -h
total 53M
-rw-r--r-- 1 shawnyan shawnyan 3.1M Jan 9 02:07 ivorysql4-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 4.9M Jan 9 02:07 ivorysql4-contrib-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 6.5M Jan 9 02:07 ivorysql4-devel-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 1.9M Jan 9 02:07 ivorysql4-docs-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 1.5M Jan 9 02:07 ivorysql4-libs-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 11M Jan 9 02:07 ivorysql4-llvmjit-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 235K Jan 9 02:07 ivorysql4-plperl-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 267K Jan 9 02:07 ivorysql4-plpython3-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 121K Jan 9 02:07 ivorysql4-pltcl-4.0-1.rhel9.x86_64.rpm
-rw-r--r-- 1 shawnyan shawnyan 24M Jan 9 02:07 ivorysql4-server-4.0-1.rhel9.x86_64.rpm
[shawnyan@rl9 ivorysql4]$ sudo dnf install ./ivorysql4-*
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
ivorysql4 x86_64 4.0-1.rhel9 @commandline 3.1 M
ivorysql4-contrib x86_64 4.0-1.rhel9 @commandline 4.9 M
ivorysql4-devel x86_64 4.0-1.rhel9 @commandline 6.4 M
ivorysql4-docs x86_64 4.0-1.rhel9 @commandline 1.8 M
ivorysql4-libs x86_64 4.0-1.rhel9 @commandline 1.5 M
ivorysql4-llvmjit x86_64 4.0-1.rhel9 @commandline 11 M
ivorysql4-plperl x86_64 4.0-1.rhel9 @commandline 234 k
ivorysql4-plpython3 x86_64 4.0-1.rhel9 @commandline 266 k
ivorysql4-pltcl x86_64 4.0-1.rhel9 @commandline 121 k
ivorysql4-server x86_64 4.0-1.rhel9 @commandline 24 M
Installing dependencies:
clang-devel x86_64 18.1.8-3.el9 AppStream 3.2 M
clang-tools-extra x86_64 18.1.8-3.el9 AppStream 20 M
libedit-devel x86_64 3.1-38.20210216cvs.el9 AppStream 39 k
llvm-devel x86_64 18.1.8-3.el9 AppStream 3.8 M
llvm-googletest x86_64 18.1.8-3.el9 AppStream 376 k
llvm-static x86_64 18.1.8-3.el9 AppStream 33 M
llvm-test x86_64 18.1.8-3.el9 AppStream 635 k
lz4 x86_64 1.9.3-5.el9 BaseOS 58 k
Transaction Summary
===========================================================================================
Install 18 Packages
...
Complete!
[shawnyan@rl9 ivorysql4]$
export PGHOME=/usr/local/ivorysql/ivorysql-4
export PGDATA=/var/lib/ivorysql/ivorysql-4/data
export PATH=$PGHOME/bin:$PATH
[ivorysql@rl9 ~]$ initdb
The files belonging to this database system will be owned by user "ivorysql".
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/ivorysql/ivorysql-4/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/Tokyo
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:
pg_ctl -D /var/lib/ivorysql/ivorysql-4/data -l logfile start
[ivorysql@rl9 ~]$
[ivorysql@rl9 ~]$ pg_ctl -D /var/lib/ivorysql/ivorysql-4/data -l logfile start
waiting for server to start.... done
server started
[ivorysql@rl9 ~]$ psql -c 'select version()'
version
-------------------------------------------------------------------------------------------------------------------------
PostgreSQL 17.0 (IvorySQL 4.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3), 64-bit
(1 row)
到此,IvorySQL 4.0 数据库安装成功。
IvorySQL 的控制信息与 PostgreSQL 有所区别,目前无法使用 pg_upgrade 直接从 PostgreSQL 升级到 IvorySQL。
[ivorysql@rl9 ~]$ pg_controldata | tail -n2
database mode: 1
case conversion mode: 1
我们可以通过 pg_dumpall 工具将数据从 PostgreSQL 导出,并导入到 IvorySQL,以此完成数据库升级任务。
备份前再次确认 PG 数据库中的表、数据。
[postgres@rl9 ~]$ psql -d shawnyan
psql (12.22)
Type "help" for help.
shawnyan=# \d
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
mydb | t | table | postgres
mydb | t_product | table | postgres
mydb | t_wishlist | table | postgres
(3 rows)
shawnyan=# select count(*) from t;
count
-------
1
(1 row)
shawnyan=# select count(*) from t_product;
count
-------
1000
(1 row)
shawnyan=# select count(*) from t_wishlist;
count
-------
3
(1 row)
执行备份。
pg_dumpall -c -f /tmp/pg12.sql
直接从 psql 客户端执行恢复。
psql -f /tmp/pg12.sql
连接 IvorySQL 数据库确认数据是否正常导入。
[ivorysql@rl9 ~]$ psql
psql (17.0)
Type "help" for help.
ivorysql=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+-------------+-------------+--------+-----------+-----------------------
ivorysql | ivorysql | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
postgres | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
shawnyan | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
template0 | ivorysql | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | =c/ivorysql +
| | | | | | | | ivorysql=CTc/ivorysql
template1 | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | postgres=CTc/postgres+
| | | | | | | | =c/postgres
(5 rows)
ivorysql=# \c shawnyan
You are now connected to database "shawnyan" as user "ivorysql".
shawnyan=# set search_path=mydb;
SET
shawnyan=# \d
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
mydb | t | table | postgres
mydb | t_product | table | postgres
mydb | t_wishlist | table | postgres
(3 rows)
经查验,数据已经成功导入到 IvorySQL 4.0 数据库中,表结构和数据与 PostgreSQL 12.22 中的一致。
本文介绍了从 PostgreSQL 12.22 升级到 IvorySQL 4.0 的主要步骤,包括在 Rocky Linux 9 上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的过程,通过备份和恢复的方式,可以顺利完成数据库的升级和迁移工作。
在实际生产环境中,升级和迁移数据库是一个非常复杂的过程,需要考虑的因素较多。除了上述步骤外,还需要同步确认数据库高可用组件的升级,扩展插件的升级,监控项的调整,应用程序的连接驱动、安全认证,数据库功能变化和参数变化带来的影响,其他兼容性变更,以及对应用程序可能造成影响的其他因素等等。
升级完成后,还有可能需要重新收集执行计划,重建索引等工作。因此,在进行数据库升级和迁移之前,建议制定详细的升级计划和方案,并进行充分的测试和验证,以确保升级过程的顺利进行和业务的稳定运行。
lvorySQL 是由瀚高股份主导研发的一款开源的兼容 Oracle 的 PostgreSQL。IvorySQL 与 PostgreSQL 国际社区紧密合作,保持与最新 PG 版本内核同步,为用户提供便捷的升级体验。基于双 Parser 架构设计,100% 与原生 PostgreSQL 兼容,支持丰富的 PostgreSQL 周边工具和扩展,并根据用户需求提供定制化工具。同时,IvorySQL 4.0 提供更全面灵活的 Oracle 兼容功能,具备高度的 SQL 和 PL/SQL 兼容性能够为企业构建更加高效、稳定和灵活的数据库解决方案。
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。