背景
之前为大家介绍了通过 DistSQL 对 Proxy 实例的管理,而 Proxy 作为数据库库代理如何去管理数据库资源呢?
接下来将为大家介绍的是如何通过 DistSQL 动态管理 Proxy 中的数据库资源(以下简称资源)。
本期『Thinking in DistSQL』为大家带来语法是 ADD RESOURCE
和 SHOW RESOURCE
。
语法
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_0
和 demo_ds_1
(此处以 MySQL 为例)。
配置文件方式
在 DistSQL 还未发布时,添加资源的方式只能通过配置文件的形式。 以 config-sharding.yaml
为例,通过配置文件为逻辑库 sharding_db
添加资源 ds_0
, ds_1
。config-sharding.yaml
中 dataSource
配置如下
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_0
和 ds_1
达到与配置文件配置资源相同的效果呢?
DistSQL 方式
标准模式
在通过客户端工具连接到 Proxy 后,首先需要创建并使用逻辑库
CREATE SCHEMA sharding_db;
USE sharding_db;
在使用逻辑库 sharding_db 后执行 ADD RESOURCE
语法以标准模式添加 ds_0
和 ds_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_milliseconds
、max_lifetime_milliseconds
等连接池属性被设置了默认值,那么如何在添加资源的同时设置设置数据库连接池属性呢?
连接池参数设置
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)
);
连接参数设置
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 对资源进行添加的过程
示例基于 Proxy 5.1.1