NDB Cluster APIs: 添加了
Ndb::setEventBufferQueueEmptyEpoch()
方法,可以启用空事件排队(事件类型TE_EMPTY
)。(缺陷号 22157845)
重要更改:数据节点配置参数 的最小值
BackupDataBufferSize
已从 2 MB 降低到 512 KB。此参数的默认值和最大值保持不变。(漏洞 #22749509)OS X: 由于变量未初始化,本地检查点的处理在 Mac OS X 上未正确处理。(缺陷 #80236,缺陷 #22647462)
Microsoft Windows:
ConfigInfo.cpp
由于 Visual Studio 对空格和串联的处理发生了变化,在 中使用 Visual Studio 2015 编译 MySQL 失败 (漏洞 #22558836,漏洞 #80024)Microsoft Windows:在 Windows 上为ndb_mgmd 设置事件日志记录时,MySQL NDB Cluster 会尝试将注册表项添加到
HKEY_LOCAL_MACHINE
,如果用户无权访问注册表,则会失败。在这种情况下, ndb_mgmd记录了错误Could neither create or open key,这是不准确的,并且可能会给可能没有意识到文件日志记录可用和正在使用的用户造成混淆。现在在这种情况下, ndb_mgmd会记录警告无法创建或访问应用程序记录到 Windows 事件日志所需的注册表项。以足够的权限运行应用程序一次以创建密钥,或手动添加密钥,或关闭该应用程序的日志记录。现在仅当ndb_mgmd事件日志记录根本没有可用输出时,才会在这种情况下报告错误(而不是警告) 。(缺陷号 20960839)Microsoft Windows: MySQL NDB Cluster 无法使用 Microsoft Visual Studio 2015 正确编译,因为该
_vsnprintf()
函数的 VS 实现与以前版本相比发生了变化。(缺陷 #80276,缺陷 #22670525)Microsoft Windows:
ANALYZE TABLE
在具有一个或多个索引的表上 执行导致ndbmtd由于信号损坏而失败并出现 InvalidAttrInfo错误。此问题在 Windows 上一直发生,但也可能在其他平台上遇到。(错误#77716,错误#21441297)Solaris: ndb_print_file实用程序在 Solaris 9 for SPARC 上始终失败。(缺陷 #80096,缺陷 #22579581)
NDB Cluster API:
NdbIndexOperation
使用基于过时的唯一索引 执行事务 现在在这种情况下会检查索引,如果无法使用,则事务会失败并出现相应的错误。(错误#79494,错误#22299443)在节点故障处理期间,用于驱动清理操作的请求结构在执行请求时未正确维护。这会导致在正常操作期间无害的不一致,但这些可能会导致节点故障处理期间的断言失败,并导致其他节点随后发生故障。(漏洞 #22643129)
-
在某些情况下,发现先前针对内部
TransporterFacade::deliver_signal()
函数缺少互斥锁保护的修复不完整。(漏洞 #22615274)参考资料:此问题是 Bug #77225、Bug #21185585 的回归。
当在一个 SQL 节点上将二进制日志设置为原子操作失败时,这可能会在其他 SQL 节点中触发一种状态,在这种状态下,它们似乎检测到参与模式更改分发的 SQL 节点,而它尚未完成二进制日志设置。当 SQL 节点仍在重试二进制日志设置时需要此锁,而另一个 mysqld 已将锁作为模式更改操作的一部分,这又可能导致全局元数据锁出现死锁。在这种情况下,第二个 SQL 节点等待第一个 SQL 节点对其模式分布更改采取行动,但它还不能这样做。(缺陷号 22494024)
-
当在包含唯一索引的备份上运行ndb_restore 时,可能会发生重复键错误 。这是因为在恢复数据期间,数据库在完成之前可能会经历一个或多个不一致状态,这样的不一致状态可能对具有唯一索引的列具有重复值。(如果数据恢复之前是运行 with
--disable-indexes
,然后 是运行 with--rebuild-indexes
,则可以避免这些错误。)添加了对备份中唯一索引的检查,该检查仅在恢复数据时执行,并且不会处理已明确排除的表。对于找到的每个唯一索引,现在都会打印一条警告。(缺陷号 22329365)
-
使用ndb_restore 恢复元数据
-m
有时会失败,并显示错误消息Failed to create index...创建唯一索引时。在诊断这个问题时,发现内部错误 PREPARE_SEIZE_ERROR(临时错误)被报错为未知错误。现在在这种情况下, ndb_restore 会重试创建唯一索引,并且PREPARE_SEIZE_ERROR被报告为 NDB Error 748 Busy during read of event table。(缺陷号 21178339)参考资料:另请参阅:Bug #22989944。
-
NdbDictionary
元数据操作有一个硬编码的 7 天超时,事实证明这对于短期操作(例如检索表定义)来说过长了。这可能会导致用户应用程序不必要地挂起,而这些挂起很难正确检测和处理。为帮助解决此问题,修改了超时行为,以便只读或短期字典交互具有 2 分钟的超时,而可能持续时间较长的架构事务保留现有的 7 天超时。这样的超时旨在作为一个安全网:如果出现问题,这些超时会将控制权返回给用户,然后用户可以采取纠正措施。任何可重现的
NdbDictionary
超时问题都应报告为错误。(缺陷号 20368354) 通过缓冲和定期发送信号来优化信号发送,或者当缓冲区变满时,可能会导致
SUB_GCP_COMPLETE_ACK
信号过度延迟。为每个节点和纪元发送此类信号,最小间隔为TimeBetweenEpochs
;如果没有及时收到,SUMA
缓冲区可能会溢出。溢出导致 API 节点断开连接,导致当前事务因节点故障而中止。这种情况使得长事务(例如更改非常大的表)难以完成。现在在这种情况下,ACK
信号会被发送而不会被延迟。(漏洞 #18753341)Ndb
创建新对象 时,用于验证连接的内部函数无法更新连接计数 。这有可能为每个验证连接的操作创建一个新Ndb
对象,这可能会对性能产生影响,尤其是在执行模式操作时。(缺陷 #80750,缺陷 #22932982)-
当一个 SQL 节点启动并加入模式分发协议时,另一个已经在等待分发模式更改的 SQL 节点在等待期间超时。这是因为代码错误地假定新的 SQL 节点也将确认模式分发,即使新节点加入得太晚而无法参与其中。
作为此修复的一部分,模式分发进度的打印输出现在总是在不太重要的部分之前打印位掩码的较重要部分;此类打印输出中的位掩码格式也得到了改进。(缺陷 #80554,缺陷 #22842538)
数据节点配置
SchedulerResponsiveness
参数(在 MySQL NDB Cluster 7.4.9 中引入)的设置被忽略。(缺陷 #80341,缺陷 #22712481)设置 CPU 自旋时间时,该值在内部被不必要地转换为布尔值,因此将其设置为任何非零值都会产生有效值 1。此问题及其修复适用于设置
SchedulerSpinTimer
参数和设置spintime
为ThreadConfig
参数值的一部分。(缺陷 #80237,缺陷 #22647476)-
if
语句中 的逻辑错误使用于确定比较操作时是否应返回storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
的检查变得无用 。这是在使用ZREAD_ERROR
编译时检测到的 。(缺陷 #80155,缺陷 #22601798)gcc
-Werror=logical-op
参考资料:此问题是 Bug #21285604 的回归。
在 SLES 11 上使用
-Werror
和-Wextra
标志构建(对于发布构建)失败。(缺陷 #79950,缺陷 #22539531)-
当使用在共享循环外键
CREATE INDEX
的两个NDB
表中的任何一个上添加索引时,查询成功但磁盘上留下了一个临时表,打破了外键约束。当尝试在外键链中间的表上创建索引时,也会观察到此问题,即同时具有父键和子键但在不同表上的表。ALTER TABLE
使用执行相同的索引创建操作时没有出现该问题 ;随后的分析揭示了 . 执行此类操作的方式存在意想不到的差异CREATE INDEX
。为了解决这个问题,我们现在确保
CREATE INDEX
语句执行的操作始终在内部以相同的方式处理,并且与 or 执行的操作ALTER TABLE
相同DROP INDEX
。(错误#79156,错误#22173891) NDB
未能忽略主键和唯一键上的索引前缀,导致使用它们CREATE TABLE
的ALTER TABLE
语句被拒绝。(错误#78441,错误#21839248)