HaloDB 的 MySQL 兼容模式

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~

alt

前倾回顾

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

以及 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 / --

alt

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

本文由 mdnice 多平台发布

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值