HaloDB 的 MySQL 兼容模式

2024年 5月 30日 47.3k 0

HaloDB 的 MySQL 兼容模式-1

前倾回顾

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

  • 哈喽,国产数据库!Halo DB!
  • 三步走,Halo DB 安装指引

以及 HaloDB 的 Oracle 兼容模式:

  • 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 兼容模式,并做了一些基础功能验证。

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

🌻 往期精彩 ▼

  • 哈喽,国产数据库!Halo DB!
  • 从 PG 技术峰会南京站汲取的那些干货
  • PG 扩展推荐:pgpasswd & PG 密碼長度
  • 即将告别PG 12,建议升级到PG 16.3版本
  • PG Style! 盘点几个常用的 Postgres 环境变量
  • 后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

– / END / –

HaloDB 的 MySQL 兼容模式-2

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论