
元数据备份恢复和 DistSQL 转换功能解读
背景
DistSQL(Distributed SQL)是 Apache ShardingSphere 特有的操作语言,它让用户可以像操作数据库一样操作 ShardingSphere,带来了方便又强大的动态管理能力。
有了 DistSQL [1] 之后,我们能够在线定义各种资源和规则,再也不必面对「修改 YAML 文件 + 重启系统」的压力了。
Q & A
随着 DistSQL 能力的增强,用户使用越来越多,也提出了一些关于 DistSQL 的疑问。其中一部分与今天的主题有关,归纳如下:
🔍 DistSQL 定义的规则保存在哪里?
✍️ DistSQL 定义的规则保存在治理中心。在集群模式下,治理中心可以是 ZooKeeper 或者 etcd;在单机模式下,用户也可以指定持久化方式,缺省值是 H2 非持久化模式。推荐用户使用集群模式。
🔍 当有多个测试环境时,怎么把 DistSQL 定义的配置转移到新的环境?
✍️ 无论是单机还是集群模式,将治理中心的数据备份转移到新的环境是比较麻烦的。DistSQL 提供 EXPORT
语法,能够将逻辑库配置导出为 YAML 格式,方便用户迁移。
🔍 我们有定时备份数据的要求,请问逻辑库的配置怎么备份?我是用 DistSQL 定义的。
✍️ 与前一问相同,用 EXPORT
导出为 YAML 文件即可作为备份。
🔍 YAML 格式放到新的 ShardingSphere 实例下,要重启生效吗?
✍️ EXPORT
语句导出的 YAML 文件可以直接放在 Proxy 的 conf 目录下,如果 Proxy 正在运行,则需要重启才能生效。更方便的方式是通过执行 IMPORT
语句,让 Proxy 从 YAML 加载数据后写入治理中心,这种方式是动态生效的,无需重启。
🔍 我配置了分片和读写分离规则,查询的时候只能分别 show [2][3] 吗?有办法一起展示出来吗?
✍️ EXPORT
语句也可以用于快速查看逻辑库配置,当不指定 TO FILE 参数时,EXPORT
的结果输出在查询结果集中。
🔍 DistSQL 看起来很好,但我以前用 YAML 配置的,不会写 DistSQL 语法,有人可以教我吗?
✍️ 社区贴心的准备了 CONVERT
语法,帮助用户将 YAML 转换为 DistSQL 语句,可以对照学习或直接复制执行。
在以上问题的解答中,我们看到了 EXPORT
、IMPORT
和 CONVERT
这几个语法,它们的作用是什么,有哪些具体用法? 现在,就让我们开始今天的解读吧!
语法排查
EXPORT DATABASE CONFIGURATION
用于将逻辑库的配置(含数据源和规则)导出为 YAML 格式。
说明如下:
▪️FROM databaseName 用于指定要导出的逻辑库;
▪️未指定 FROM databaseName 时,导出当前使用的逻辑库;
▪️当指定 TO FILE filePath 参数时,导出信息将输出到目标文件中。
▪️若文件不存在,会自动创建;若文件已存在,将会被覆盖;
▪️filePath 为 STRING 类型。
IMPORT DATABASE CONFIGURATION
用于将 YAML 中的配置(含数据源和规则)
导入到当前逻辑库中
说明如下:
▪️ 待导入的文件必须符合 Proxy 的 YAML 配置格式。
▪️ 导入目标必须是空的逻辑库,即当前使用的逻辑库中不存在存储节点和规则配置;
▪️ 文件中必须包含 databaseName 并且与当前操作的逻辑库名一致。
▪️ 文件中必须包含 dataSources 存储资源配置;
▪️ filePath 为 STRING 类型。
CONVERT YAML CONFIGURATION
用于将 YAML 配置转换为对应的 DistSQL 语句。
说明如下:
▪️ 待转换的文件必须符合 Proxy 的 YAML 配置格式;
▪️ filePath 为 STRING 类型
实战演练
本次演示以 MySQL 场景为例,ShardingSphere-Proxy 部署为集群模式。
环境准备
-
在 MySQL 中创建两个库 demo_ds_0 和 demo_ds_1;
-
启动 ZooKeeper 服务;
-
在 ShardingSphere-Proxy 的 server.yaml 中配置 mode 信息,并启动 [4]。
配置逻辑库
-
创建逻辑库
-
注册存储节点
-
创建分片规则
操作流程如下:
通过以上操作,我们动态的创建了一个逻辑库
sharding_db
,其存储节点信息和分片规则都将保存在治理中心 ZooKeeper 中。
EXPORT DATABASE CONFIGURATION
仅查看配置
执行示例
执行
EXPORT DATABASE CONFIGURATION
后,逻辑库配置就以经典的 YAML 格式呈现出来了。
输出到 YAML 文件
执行示例
加上
TO FILE
参数之后,
EXPORT DATABASE CONFIGURATION
的结果就输出到了指定的文件中。下图展示了
sharding_db.yaml
的内容:
IMPORT DATABASE CONFIGURATION
在导出成功之后,我们可以使用 sharding_db.yaml 在任意的 ShardingSphere-Proxy 中进行导入操作。为了方便演示,我们将当前元数据中的 sharding_db 删除,并通过 IMPORT 语句进行导入。
准备新库
执行示例
通过以上操作,我们创建了一个新的逻辑库
sharding_db
,该逻辑库中没有任何配置信息。
导入逻辑库
执行示例
这样,我们就将导出的逻辑库配置恢复到了在线的 ShardingSphere-Proxy 中,简单方便。
想要检查导入的结果,也可以通过 SHOW 和 EXPORT DATABASE CONFIGURATION 语句进行确认。
CONVERT YAML CONFIGURATION
在
EXPORT
和
I
MPOR
T
的基础上,
CONVERT YAML CONFIGURATION
语法为我们带来了更多可能:
-
帮助习惯 YAML 的用户过渡到 DistSQL 动态管理;
- 对于不方便拷贝文件进行导入的场景,可以将导出的 YAML 转换为 DistSQL,通过 SQL 客户端来迁移配置;
接下来,让我们把
EXPORT
导出的
sharding_db.yaml
转换为 DistSQL:
执行示例
结语
到这里,元数据导出、导入和 YAML 转 DistSQL 的功能就解读完毕了,相信读者也能再次感受到 DistSQL 带来的方便和灵活。关于 DistSQL 的更多信息,请关注官网文档 [1] 和 GitHub [5]。
如果读者对 Apache ShardingSphere 有任何疑问或建议,欢迎在 GitHub issue 列表提出,或可前往中文社区 [6] 交流讨论。
🔗 参考
[1] DistSQL 文档:https://shardingsphere.apache.org/document/5.3.1/cn/user-manual/shardingsphere-proxy/distsql/
[2] SHOW SHARDING TABLE RULE:https://shardingsphere.apache.org/document/5.3.1/cn/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-rule/
[3] SHOW READWRITE_SPLITTING RULE:https://shardingsphere.apache.org/document/5.3.1/cn/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/readwrite-splitting/show-readwrite-splitting-rule/
[4] 使用 ShardingSphere-Proxy 二进制发布包:https://shardingsphere.apache.org/document/5.3.1/cn/user-manual/shardingsphere-proxy/startup/bin/
[5] GitHub issue 列表:https://github.com/apache/shardingsphere/issues
[6] 中文社区:OpenSEC - SphereEx 中文社区|开源异构分布式数据服务交流平台 - SphereEx 中文社区
文章转载自公众号: ShardingSphere官微
