开启MySQL模式
方式一:cluster_net_services(推荐)
Halo 16 通过 cluster_net_services 参数支持在同一实例中同时运行多种兼容模式,推荐使用此方式。
修改配置文件
编辑 $PGDATA/postgresql.conf,设置以下参数:
# 开启 MySQL 模式
cluster_net_services = ':3306:mysql'
# 指定默认 MySQL 模式的库
mysql.default_tenant = 'halo0root'
重启数据库并创建扩展
# 重启数据库
pg_ctl restart
# 创建 mysql 数据库
psql -c "create database mysql;"
# 创建 MySQL 扩展
psql -d mysql -c "create extension aux_mysql cascade;"
创建 MySQL 模式的用户
psql
-- 设置密码加密方式
SET password_encryption='mysql_native_password';
-- 创建 MySQL 用户
CREATE USER mysqltest SUPERUSER PASSWORD '123456';
连接测试
# 如果设置了 mysql.default_tenant = 'mysql'
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
方式二:database_compat_mode
Halo14 通过 database_compat_mode 参数结合 second_listener_on 和 second_port 开启 MySQL 模式。该方式在 Halo 16 中仍然支持,但一次只能设置一种兼容模式。
修改配置文件
编辑 $PGDATA/postgresql.conf,设置以下参数:
# 1. 数据库运行模式设置为 mysql
database_compat_mode = 'mysql'
# 2. 开启 MySQL 第二监听服务
second_listener_on = true
# 3. 指定 MySQL 服务的监听端口,建议设置为 3306
second_port = 3306
重启数据库并创建扩展
# 重启数据库
pg_ctl restart
# 创建数据库
psql -c "create database test;"
# 创建 schema 并授权
psql -d test -c "create schema test;"
psql -d test -c "GRANT ALL PRIVILEGES ON SCHEMA test TO halo1;"
创建 MySQL 模式的用户
psql
-- 设置密码加密方式
SET password_encryption='mysql_native_password';
-- 创建用户
CREATE USER halo1 WITH PASSWORD 'halo1';
-- 授权
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO halo1;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO halo1;
ALTER USER halo1 LOGIN;
ALTER USER halo1 CREATEDB;
ALTER USER halo1 SUPERUSER;
连接测试
# 本地用户无需密码
mysql -h 127.0.0.1 -P 3306 -u halo1 -D test
# 远程用户需要密码
mysql -h xxx.xxx.xxx.xxx -P 3306 -u halo1 -D test -p
注意:
- 采用 MySQL 模式时,MySQL 的数据库即 schema,只需要在 halo0root 库下创建 schema 即可。
- 创建新的表之后,需要对目标用户进行授权,否则目标用户将无权访问该表。
- 此方式下整个实例只能运行一种兼容模式,无法同时开启 Oracle 和 MySQL 等多种模式。
- 如需在 Halo 16 中同时使用 Oracle、MySQL 等多种模式,请使用方式一(
cluster_net_services)。