兼容模式配置
Halo 数据库支持 Oracle、MySQL、PostgreSQL 三种兼容模式。其中 PostgreSQL 模式无需额外配置,Oracle 和 MySQL 模式通过配置参数开启。
开启方式说明
Halo 提供两种开启兼容模式的方式:
| 方式 | 参数 | 适用版本 | 特点 |
|---|---|---|---|
| 新方式(推荐) | cluster_net_services | Halo 16 | 支持多模式同时运行,按端口区分模式 |
| 旧方式 | database_compat_mode | Halo 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'
各模式使用各自端口独立访问,互不影响。