暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

HaloDB 的 MySQL 兼容模式

原创 严少安 2024-05-30
255

前倾回顾

前面介绍了“光环”数据库的基本情况和安装办法。

以及 HaloDB 的 Oracle 兼容模式:

HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。
业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。

本文将介绍如何开启 HaloDB 的 MySQL 兼容模式,以及基础使用方法。

HaloDB 的 MySQL 兼容模式

Halo 数据库兼容 MySQL 协议,可以直接使用 MySQL 客户端连接到 Halo 数据库。

Halo 的 MySQL 兼容模式有两种类型的用户,一种是 MySQL 用户,另一种是 Halo 用户。

MySQL 用户专门提供给业务系统使用,且只能以标准 MySQL 客户端方式连接到 Halo 的业务服务端口。

MySQL 用户一般只建议用于 DML(业务相关的增删查改) 操作。

以下列举 MySQL 兼容能力(部分):

  • 支持 MySQL 协议
  • 支持 MySQL 的基本数据类型
  • 支持 MySQL 引号使用方式
  • 支持 REPLACE INTO
  • 支持 INSERT IGNORE
  • 支持 UPDATE … ON DUPLICATE KEY
  • 支持 INSERT … VALUE
  • 支持 LIMIT 操作
  • 支持 UPDATE … [ORDER BY] … LIMIT
  • 支持 DELETE … [ORDER BY] … LIMIT
  • 支持 ORDER BY 按指定列顺序排序
  • 支持 SET 类型
  • 支持符号
  • 支持使用变量
  • 支持枚举类型

等等。

清单很长,这里就不再列举了,详情可留言,带你进《HaloDB产品吐槽群》。

开启 HaloDB 的 MySQL 兼容模式

修改配置文件

如需开启 MySQL 兼容模式,需要先对数据库配置文件 postgresql.conf 进行调整。

#database_compat_mode = 'postgresql' --> database_compat_mode = 'mysql'
#standard_parserengine_auxiliary = 'on' --> standard_parserengine_auxiliary = 'on'
#second_listener_on = false --> second_listener_on = 1
#second_port = 3307 --> second_port = 3306
复制

其中,

  • database_compat_mode

该参数表示:

该参数为枚举类型,表示数据库运行模式。

默认值为 postgresql,其它可取值包括 oracle 、 mysql 、 sybase 、 sqlserver 、 db2 等。

  • standard_parserengine_auxiliary

该参数表示:

是否需要标准编译引擎协同。默认值 on.

  • second_listener_on

该参数表示:

为了使用 Halo 的 MySQL 模式,需要开启第二监听。

  • second_port

该参数表示:

Halo 的 MySQL 模式监听的端口,建议配置为 3306。

重启 Halo 数据库

pg_ctl restart
复制

创建 MySQL 扩展

针对需要启用 MySQL 解析引擎的数据库创建 MySQL 扩展:

注: 采用 mysql 模式情况下,mysql 的数据库即 schema,只需要在 halo0root 库下创建 schema 就可以。

create extension aux_mysql;
复制

查看已安装的扩展:

shawnyan=# \dx
                       List of installed extensions
   Name    | Version |       Schema       |          Description
-----------+---------+--------------------+-------------------------------
 aux_init  | 1.0     | information_schema | Init Supplementary Extension
 aux_mysql | 1.4     | public             | MySQL Supplementary Extension
 plpgsql   | 1.0     | pg_catalog         | PL/pgSQL procedural language
(3 rows)
复制

测试 HaloDB 的 MySQL 兼容模式

  1. 创建 application 用户
set password_encryption='mysql_native_password'; 
CREATE USER sbtest SUPERUSER PASSWORD 'sbtest';
复制
shawnyan=# \du sbtest
           List of roles
 Role name | Attributes | Member of
-----------+------------+-----------
 sbtest    | Superuser  | {}
复制
  1. 创建 application 库
create schema sbtest;
复制
shawnyan=# \dn sbtest
List of schemas
  Name  | Owner
--------+-------
 sbtest | halo
(1 row)
复制
  1. 使用 mysql 客户端连接到 halo 数据库
[halo@centos7 halo]$ mysql -usbtest -h192.168.195.128 -P3307 s2 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 8.0.30 MySQL Server (GPL) Copyright (c) 2000, 2024, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------------+ | database | +--------------------------+ | dbms_alert | | dbms_assert | | dbms_obfuscation_toolkit | | dbms_output | | dbms_pipe | | dbms_random | | dbms_utility | | information_schema | | mysql | | oracle | | performance_schema | | s1 | | s2 | | sys | | utl_file | | utl_i18n | +--------------------------+ 16 rows in set (0.00 sec) mysql> use s2 Database changed mysql> show tables; Empty set (0.00 sec) mysql> create table t(id int); Query OK, 0 rows affected (0.01 sec) mysql> insert t select 1; Query OK, 1 row affected (0.00 sec) mysql> table t; ERROR 1105 ( ): Unsupport statement/command! Please retry on Halo tool with corresponging Halo statement/command. mysql> select * from t; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
复制
  1. 查看 mysql 相关参数
halo0root=# select name,setting from pg_settings where name like '%mysql%';
                 name                  |  setting
---------------------------------------+------------
 mysql.ci_collation                    | on
 mysql.column_name_case_control        | 0
 mysql.customized_case_column_names    | aaabbb
 mysql.explicit_defaults_for_timestamp | off
 mysql.halo_mysql_version              | 8.0.99-log
(5 rows)
复制
  1. 跨库查询能力

halo 的 mysql 模式支持跨库查询,举例如下:

  1. 创建模式 s1 和 s2
CREATE SCHEMA s1 AUTHORIZATION sbtest;
CREATE SCHEMA s2 AUTHORIZATION sbtest;
复制

查验:

halo0root=# \dn s*
List of schemas
 Name | Owner
------+--------
 s1   | sbtest
 s2   | sbtest
 sys  | halo
(3 rows)
复制
  1. 在 s1 下创建表 t1,在 s2 下创建表 t2
CREATE TABLE s1.t1 ( id int, name varchar(20));
CREATE TABLE s2.t2 ( id int, name varchar(20));
复制

查验:

halo0root=# SET SEARCH_PATH TO s1, s2;
SET
halo0root=# \d
         List of relations
 Schema |   Name    | Type  | Owner
--------+-----------+-------+-------
 mysql  | dual      | view  | halo
 mysql  | proc      | view  | halo
 mysql  | proc_type | table | halo
 mysql  | user      | table | halo
 s1     | t1        | table | halo
 s2     | t2        | table | halo
(6 rows)
复制
  1. 使用 mysql 客户端连接 halo,并分别对表 t1, t2 写入数据
insert s1.t1 select 1, 't1';
insert s2.t2 select 1, 't2';
复制

查验:

mysql> select * from s1.t1;
+----+------+
| id | name |
+----+------+
|  1 | t1   |
+----+------+
1 row in set (0.00 sec)

mysql> select * from s2.t2;
+----+------+
| id | name |
+----+------+
|  1 | t2   |
+----+------+
1 row in set (0.00 sec)
复制
  1. 执行跨库查询语句

当前连接的是 s1 库,关联查询 s2 库中的表

mysql> select * from t1 join s2.t2 t2 where t1.id = t2.id;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
|  1 | t1   |  1 | t2   |
+----+------+----+------+
1 row in set (0.00 sec)
复制

总结

到此,我们介绍了如何开启 HaloDB 的 MySQL 兼容模式,并做了一些基础功能验证。

如果你也对这款“光环”数据库感兴趣,欢迎转发、留言。

🌻 往期精彩 ▼


– / END / –

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

最后修改时间:2024-05-30 16:50:51
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

目录
  • 前倾回顾
  • HaloDB 的 MySQL 兼容模式
  • 开启 HaloDB 的 MySQL 兼容模式
    • 修改配置文件
    • 重启 Halo 数据库
    • 创建 MySQL 扩展
  • 测试 HaloDB 的 MySQL 兼容模式
  • 总结
  • 🌻 往期精彩 ▼