『Thinking in DistSQL』 Proxy 中资源的添加与展示

背景

之前为大家介绍了通过 DistSQL 对 Proxy 实例的管理,而 Proxy 作为数据库库代理如何去管理数据库资源呢?

接下来将为大家介绍的是如何通过 DistSQL 动态管理 Proxy 中的数据库资源(以下简称资源)。

本期『Thinking in DistSQL』为大家带来语法是 ADD RESOURCE SHOW RESOURCE

:triangular_flag_on_post: 语法

RDL 语法 ADD RESOURCE 以及 RQL 语法 SHOW RESOURCE

完整语法如下:

![image-20220419113116281](/Users/lancx/Library/Application Support/typora-user-images/image-20220419113116281.png)

![image-20220419114013250](/Users/lancx/Library/Application Support/typora-user-images/image-20220419114013250.png)

语法作用

  • ADD RESOURCE 用于在使用的 SCHEMA 中添加资源
  • SHOW RESOURCE 用于展示指定的 SCHEMA 中的资源

资源添加实践

准备

与使用其他 DistSQL 相同的是需要启动并通过客户端连接 Proxy。详细的启动步骤可以参考官方文档 Proxy

除了 Proxy 的启动以外,还需要准备两个可连接的数据源资源 demo_ds_0demo_ds_1(此处以 MySQL 为例)。

:small_blue_diamond: 配置文件方式

在 DistSQL 还未发布时,添加资源的方式只能通过配置文件的形式。 以 config-sharding.yaml 为例,通过配置文件为逻辑库 sharding_db 添加资源 ds_0, ds_1config-sharding.yamldataSource 配置如下

schemaName: sharding_db

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  ds_1:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

DistSQL 发布之后,如何使用 DistSQL 在 sharding_db 中添加资源 ds_0ds_1 达到与配置文件配置资源相同的效果呢?

:small_blue_diamond: DistSQL 方式
:black_small_square: 标准模式

在通过客户端工具连接到 Proxy 后,首先需要创建并使用逻辑库

CREATE SCHEMA sharding_db;
USE sharding_db;

在使用逻辑库 sharding_db 后执行 ADD RESOURCE 语法以标准模式添加 ds_0ds_1

ADD RESOURCE ds_0 (
    HOST=127.0.0.1,
    PORT=3306,
    DB=demo_ds_0,
    USER=root,
    PASSWORD=root
), ds_1 (
    HOST=127.0.0.1,
    PORT=3306,
    DB=demo_ds_1,
    USER=root,
    PASSWORD=root
);

至此,已经完成资源的添加,可以通过 SHOW RESOURCE 语法查看已经添加的资源

SHOW SCHEMA RESOURCES;
+------+-------+-----------+------+-----------+---------------------------------+---------------------------+---------------------------+---------------+---------------+-----------+------------------+
| name | type  | host      | port | db        | connection_timeout_milliseconds | idle_timeout_milliseconds | max_lifetime_milliseconds | max_pool_size | min_pool_size | read_only | other_attributes |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+------+-------+-----------+------+-----------+---------------------------------+---------------------------+---------------------------+---------------+---------------+-----------+------------------+
| ds_1 | MySQL | 127.0.0.1 | 3306 | demo_ds_1 | 30000                           | 60000                     | 2100000                   | 50            | 1             | false     | ....             |
| ds_0 | MySQL | 127.0.0.1 | 3306 | demo_ds_0 | 30000                           | 60000                     | 2100000                   | 50            | 1             | false     | ....             |
+------+-------+-----------+------+-----------+---------------------------------+---------------------------+---------------------------+---------------+---------------+-----------+------------------+
2 rows in set (0.12 sec)

不难发现添加的资源中 idle_timeout_millisecondsmax_lifetime_milliseconds 等连接池属性被设置了默认值,那么如何在添加资源的同时设置设置数据库连接池属性呢?

:black_small_square: 连接池参数设置

ADD RESOURCE 语法中的 PROPERTIES 字段提供了设置数据库连接池属性的入口,调整后的语法如下

ADD RESOURCE ds_0 (
    HOST=127.0.0.1,
    PORT=3306,
    DB=demo_ds_0,
    USER=root,
    PASSWORD=root,
    PROPERTIES("maximumPoolSize"=100)
), ds_1 (
    HOST=127.0.0.1,
    PORT=3306,
    DB=demo_ds_1,
    USER=root,
    PASSWORD=root,
    PROPERTIES("maxPoolSize"=100)
);
:black_small_square: 连接参数设置

ADD RESOURCE 语法除了提供标准模式添加资源以外,还提供 URL 模式的方式用于设置数据库连接参数,URL 模式语法如下

ADD RESOURCE ds_0 (
    URL="jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false",
    USER=root,
    PASSWORD=root,
    PROPERTIES("maxPoolSize"=100)
), ds_1 (
    URL="jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false",
    USER=root,
    PASSWORD=root,
    PROPERTIES("maxPoolSize"=100)
);

另外值得一提的是当数据库密码中包含特殊字符如@# 等,直接使用PASSWORD=root@# 的方式可能会出现语法错误的提示,需要使用字符串的形式进行替换如 PASSWORD="root@#"

以上就是通过 DistSQL 对资源进行添加的过程 :wave:

示例基于 Proxy 5.1.1

1 个赞
京ICP备2021015875号