跳到主要内容
版本:1.0.16

兼容模式配置

Halo 数据库支持 Oracle、MySQL、PostgreSQL 三种兼容模式。其中 PostgreSQL 模式无需额外配置,Oracle 和 MySQL 模式通过配置参数开启。

开启方式说明

Halo 提供两种开启兼容模式的方式:

方式参数适用版本特点
新方式(推荐)cluster_net_servicesHalo 16支持多模式同时运行,按端口区分模式
旧方式database_compat_modeHalo 14一次只能设置一种兼容模式

Halo 16 仍然兼容旧方式(database_compat_mode),但推荐使用新方式以支持多模式并存。

兼容 Oracle 模式

新方式(推荐)

修改 $PGDATA/postgresql.conf

cluster_net_services = ':1521:oracle'

重启并创建扩展:

pg_ctl restart
psql -c "create database oracle;"
hsql -d oracle -p 1521 -c "create extension aux_oracle cascade;"

旧方式(Halo14)

修改 $PGDATA/postgresql.conf

database_compat_mode = 'oracle'

重启并创建扩展:

pg_ctl restart
psql -d your_database -c "create extension aux_oracle cascade;"

Oracle 模式下必须创建 aux_oracle 扩展才能使用 Oracle 语法。

兼容 MySQL 模式

新方式(推荐)

修改 $PGDATA/postgresql.conf

cluster_net_services = ':3306:mysql'
mysql.default_tenant = 'mysql'

相关 MySQL 参数:

参数说明默认值
mysql.default_tenant指定默认 MySQL 模式的库
mysql.max_allowed_packet最大数据包大小4MB

重启并创建扩展:

pg_ctl restart
psql -c "create database mysql;"
psql -d mysql -c "create extension aux_mysql cascade;"

设置 MySQL 应用用户:

psql
SET password_encryption='mysql_native_password';
CREATE USER mysqltest SUPERUSER PASSWORD '123456';

连接测试:

# 如果设置了 mysql.default_tenant
mysql -h xxx.xxx.xxx.xxx -d xxx -u mysqltest -p
# 如果 mysql.default_tenant 为空
mysql -h xxx.xxx.xxx.xxx -d xxx -u mysqltest@dbname -p

旧方式(Halo14)

修改 $PGDATA/postgresql.conf

database_compat_mode = 'mysql'
second_listener_on = true
second_port = 3306

重启并创建扩展:

pg_ctl restart

MySQL 模式下,MySQL 的数据库即 schema,只需在 halo0root 库下创建 schema 即可。创建新表后需要对目标用户授权。

兼容 PostgreSQL 模式

Halo 数据库原生兼容 PostgreSQL 协议和语法,无需做任何额外配置。安装完成后即可使用标准 PostgreSQL 客户端(如 psql、JDBC)直接连接。

在多模式并存场景下,可以通过 cluster_net_services 为 PostgreSQL 模式显式指定端口:

cluster_net_services = ':5432:postgresql,:1521:oracle,:3306:mysql'

兼容多模式

多种模式可以同时配置,以英文逗号 , 隔开:

cluster_net_services = ':5432:postgresql,:1521:oracle,:3306:mysql'
mysql.default_tenant = 'mysql'

各模式使用各自端口独立访问,互不影响。