MySQL NDB Cluster 7.5.6 是 MySQL NDB Cluster 7.5 的新版本,它基于 MySQL Server 5.7,包括NDB
存储引擎 7.5 版中的功能,并修复了最近在以前的 NDB Cluster 版本中发现的错误。
获取 MySQL NDB Cluster 7.5。 MySQL NDB Cluster 7.5 源代码和二进制文件可以从https://mysql.net.cn/downloads/cluster/获得。
有关 MySQL NDB Cluster 7.5 中所做更改的概述,请参阅 NDB Cluster 7.5 中的新增功能。
此版本还合并了以前 NDB Cluster 版本中所做的所有错误修复和更改,以及通过 MySQL 5.7.18 在主线 MySQL 5.7 中添加的所有错误修复和功能更改(请参阅MySQL 5.7.18 中的更改(2017-04- 10,普遍适用)。
-
打包: 为 EL5、EL6、EL7 和 SLES12 添加了 Yum repo 包。
为 Debian 7、Debian 8、Ubuntu 14.04 和 Ubuntu 16.04 添加了 Apt repo 包
-
分区:在具有大量 分区的显式分区表上运行时,列
EXPLAIN PARTITIONS
显示的不正确值 的输出partitions
NDB
这是因为,在处理
EXPLAIN
语句时,mysqld 将哈希值的分区 ID 计算为 ( ),这仅在表按 分区时正确 ,因为其他分区类型使用不同的方法将哈希值映射到分区身份证。此修复将 mysqld执行的分区 ID 计算替换为内部 函数,该函数根据表的分区类型正确计算分区 ID。(缺陷号 21068548)hash_value
%number_of_partitions
HASH
NDB
参考资料:另请参阅:Bug #25501895、Bug #14672885。
Solaris: 由于对系统运行时库的依赖,Solaris 的最低要求版本现在是 Solaris 11 update 3。
-
Solaris: 在 Solaris 上,MySQL 现在是使用 Developer Studio 12.5 而不是gcc构建的。二进制文件需要安装 Developer Studio C/C++ 运行时库。有关如何仅安装库的信息,请参见此处:
https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html
NDB 磁盘数据: 已删除的 NDB 磁盘数据表中的陈旧数据可能会包含在备份中,因为已为这些数据启用了磁盘扫描。为了防止这种可能性,现在在进行备份时禁用磁盘扫描(与其他类型的扫描一样)。(漏洞 #84422,漏洞 #25353234)
NDB 磁盘数据: 在某些情况下,将 NDB 磁盘数据表的动态内存列设置
NULL
为未正确处理。(错误#79253,错误#22195588)-
NDB Cluster API: 当客户端进程正在接收诸如
SUB_GCP_COMPLETE_ACK
和TC_COMMIT_ACK
时,这些信号会临时缓冲在发送它们的客户端的发送缓冲区中。如果没有显式刷新,信号将保留在这些缓冲区中,直到客户端再次醒来并刷新其缓冲区。因为没有尝试对信号在本地客户端缓冲区中保持未发送的时间施加上限,这可能会导致等待这些信号的组件发生超时和其他不当行为。此外,对先前相关问题的修复可能会通过删除客户端唤醒而使这种情况变得更糟,在此期间客户端发送缓冲区可能已被刷新。
当前的修复将刷新接收者发送的消息的责任转移到了接收者(
poll_owner
客户端)。这意味着不再需要唤醒所有客户端只是为了让它们刷新缓冲区。取而代之的是,poll_owner
客户端(已经在运行)在向接收者传递信号时刷新发送缓冲区。(漏洞 #22705935)参考资料:另请参阅:Bug #18753341、Bug #23202735。
DBDIH
在数据库具有大量片段副本的某些情况下,作为本地检查点结束 的主块对数据节点主线程的 CPU 使用率 可能接近 100%。这是通过减少 LCP 期间片段队列检查的频率和范围来解决的。(缺陷号 25443080)-
当备份包含一个包含超过 500 列的表时,ndb_print_backup_file实用程序在尝试从备份文件中读取时失败。(漏洞 #25302901)
参考资料:另请参阅:Bug #25182956。
CMake
现在检测是否出现 GCC 5.3.0 循环优化错误,如果出现则尝试解决方法。(缺陷号 25253540)-
集群部分重启期间的多个数据节点故障可能会导致 API 节点失败。这是由于一个线程扩展了内部对象 ID 映射,从而改变了它在内存中的位置,而另一个线程仍在访问旧位置,导致后一个线程出现分段错误。
出现此问题 的内部
map()
和 函数现在已成为线程安全的。unmap()
(缺陷号 25092498)参考资料:另请参阅:Bug #25306089。
在扫描请求的初始阶段,
DBTC
内核块向块发送一系列DIGETNODESREQ
信号,DBDIH
以获得要扫描的每个片段的字典信息。如果DBDIH
返回DIGETNODESREF
,则不会读取来自该信号的错误代码,而是始终返回Error 218 Out of LongMessageBuffer 。现在在这种情况下,实际使用来自 DIGETNODESREF信号的错误代码。(漏洞 #85225,漏洞 #25642405)-
源自不同 SQL 节点的同一数据库对象上的模式操作之间存在竞争条件的可能性;当其中一个 SQL 节点延迟释放其对受影响的模式对象的元数据锁时,可能会发生这种情况,这种方式在模式分发协调器看来是因为错误的模式更改确认了锁释放。这可能会导致在部分或所有 SQL 节点上不正确地应用模式更改,或者由于分发协议失败而导致节点日志中重复等待最大
###
秒分发消息的超时。(缺陷 #85010,缺陷 #25557263)参考资料:另请参阅:Bug #24926009。
-
当使用
ALTER TABLE
语句将外键添加到 NDB 表或从中删除时,父表的元数据不会更新,这使得之后可以对父表执行无效的更改操作。在升级到此版本之前,您可以通过
SHOW CREATE TABLE
在添加或删除外键后立即在父级上运行来解决此问题;此语句导致重新加载表的元数据。(错误#82989,错误#24666177) -
当还启用查询缓存时,具有级联外键的表上的事务
NDB
返回不一致的结果,因为 mysqld不知道子表更新。这意味着稍后SELECT
从子表中获取的结果是从查询缓存中获取的,此时包含陈旧数据。在这种情况下,通过将父表的所有子表添加到一个内部列表来解决 这个问题,以便在父表
NDB
更新时检查更新,以便mysqld现在正确地通知任何应该从查询缓存中失效的更新子表. (缺陷 #81776,缺陷 #23553507) 现在支持 Ubuntu 14.04 和 Ubuntu 16.04。