作者:Arnab Ray 译:徐轶韬
数据节点是MySQL NDB Cluster的分布式分片存储核心。MySQL服务器通常会访问其数据(在NDB中也称为SQL节点)。每个MySQL服务器都有自己的事务性数据字典(DD),其中存储了MySQL服务器需要使用的表,数据库,表空间,日志文件组,外键和其它对象的所有元数据。8.0版中的MySQL服务器的数据字典进行了改进,例如原子性和崩溃安全的DDL以及INFORMATION_SCHEMA
实现等。在存储引擎级别,NDB拥有自己的分布式数据字典,该字典描述了可以使用本机NdbApi直接修改的全部模式对象。
从NDB集群的角度来看,NDB数据字典被视为真实的来源,而每个MySQL服务器的数据字典相当于一个缓存的副本,其重叠部分的内容需要与NDB数据字典的内容保持同步。ndbcluster存储引擎插件通过以下三种机制来实现此同步:
SHOW TABLES
查询或使用“表发现”机制在每个表的基础上进行更大范围的同步来完成。表发现可以通过任何涉及打开表的DML触发,例如:SELECT
或SHOW CREATE TABLE
。
MySQL 8.0中,重构了MySQL Server的数据字典,将模式信息存储在InnoDB表中,并使用InnoDB事务为MySQL Server数据字典的DDL操作提供事务行为。对于NDB来说,MySQL 8.0中事务性数据字典的引入,涉及对模式同步和分发的内部工作的重大更改,包括对各个协议的改进。大多数这种架构同步工作都是在后台自动完成的,对用户几乎没有影响,而用户触发的同步操作则明显不同,我们借此机会检查它的行为,并改变了它在NDB Cluster 8.0中的整体工作。
在NDB Cluster 7.x版本中,执行SHOW TABLES
命令等效于模式同步,将数据目录的内容与NDB字典的内容进行比较,并更正检测到的任何不匹配项。但由于以下原因,这不是一个理想的操作:
SHOW TABLES
的额外工作:SHOW TABLES
本来是一个简单的读查询,但它执行了其它的元数据更改,并使用了比预期更多的资源。NDB Cluster 7.x版本中的此功能依赖于.frm文件的存在,随着MySQL 8.0中的数据字典的改变,该文件已被删除。这让我们有机会在NDB集群8.0中从头再来,看看如何处理这个问题。阅读后续文章,以获取有关NDB Cluster 8.0中自动模式同步的更多详细信息!
本文分享自 MySQL解决方案工程师 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!