MySQL NDB Cluster 7.6.13 是 NDB 7.6 的新版本,它基于 MySQL Server 5.7,包括
NDB
存储引擎 7.6 版中的功能,并修复了最近在之前的 NDB Cluster 版本中发现的错误。
获取 NDB Cluster 7.6。 NDB Cluster 7.6 源代码和二进制文件可以从 https://mysql.net.cn/downloads/cluster/获得。
有关 NDB Cluster 7.6 中所做更改的概述,请参阅 NDB Cluster 7.6 中的新增功能。
此版本还合并了以前 NDB Cluster 版本中所做的所有错误修复和更改,以及通过 MySQL 5.7.29 在主线 MySQL 5.7 中添加的所有错误修复和功能更改(请参阅MySQL 5.7.29 中的更改(2020-01- 13、一般可用性) ) 。
-
重要变化: 现在可以将备份分成多个片,并使用为 ndb_restore实用程序实现的两个新选项并行恢复这些片,从而可以使用多个ndb_restore实例来恢复与备份大小大致相同的子集parallel,这应该有助于减少从备份中恢复 NDB Cluster 所需的时间长度。
这些
--num-slices
选项决定了备份应该被划分成的片数;提供要由ndb_restore--slice-id
恢复的切片的 ID(小于切片数 0 到 1)。最多支持 1024 个切片。
有关详细信息,请参阅
--num-slices
和--slice-id
选项的说明。(缺陷号 30383937)
-
Incompatible Change: The minimum value for the
RedoOverCommitCounter
data node configuration parameter has been increased from 0 to 1.RedoOverCommitLimit
也已从 0 增加到 1。在升级之前,您应该检查集群全局配置文件并对为这些参数设置的值进行任何必要的调整。(漏洞#29752703)
微软Windows; NDB 磁盘数据: 在 Windows 上,在使用磁盘数据表时重启主节点以外的数据节点会导致
TSMAN
. (缺陷 #97436,缺陷 #30484272)NDB 磁盘数据: 在 NDB 7.6 中引入版本 2 格式之前使用的版本 1 磁盘格式的兼容性代码证明不是必需的,并且不再使用。
实施部分本地检查点时引入的故障
ndbrequire()
假设m_participatingLQH
在接收时必须清除,当主机在发送之后和处理任何 信号之前START_LCP_REQ
发生故障时不一定为真。(缺陷号 30523457)START_LCP_REQ
START_LCP_CONF
当主节点在发送
LCP_COMPLETE_REP
信号时失败并且它被发送到一些节点,但不是所有节点,有时本地检查点会挂起。(缺陷号 30520818)与和选项一起 执行ndb_restore 不会为目标数据库中的任何表创建索引。(缺陷号 30411122)
--rebuild-indexes
--rewrite-database
--exclude-missing-tables
在同步范围页面时,如果在接收到写入范围同步页面的最后一页
CONTINUEB
的信号时处理 LCP 的信号仍然未完成, 则当前本地检查点 (LCP) 可能会无限期地停止 。FSWRITECONF
如果从数据页写入另一页,LCP 也可以重新启动。这个问题也可能导致PREP_LCP
页面在不应该的时候被写入。(缺陷号 30397083)-
如果事务在从磁盘页面缓冲区获取页面时中止并且磁盘系统过载,事务将无限期挂起。这也可能导致重新启动挂起和节点故障处理失败。(错误#30397083,错误#30360681)
参考资料:另请参阅:Bug #30152258。
数据节点故障并显示错误Another node failed during system restart...发生在部分重启期间。(缺陷号 30368622)
如果在删除日志文件组作为部分本地检查点的一部分
SYNC_EXTENT_PAGES_REQ
时接收到信号PGMAN
,并因此删除此块锁定的页面以进行下一步处理,则 LCP 会因尝试访问已删除的页面而终止。(缺陷号 30305315)-
对于已完成的本地检查点,集群日志中报告了错误的字节数。(缺陷号 30274618)
参考资料:另请参阅:Bug #29942998。
备份完成时写入群集日志的摘要事件的数据字节数被截断为 32 位,因此日志记录数与此事件在日志中打印的数据记录数之间存在显着不匹配. (漏洞#29942998)
-
在每个节点有 10 个线程的 2 节点集群上使用 2 个 LDM 线程可能会导致分区不平衡,这样每个节点上的一个 LDM 线程是零碎片的主要线程。尝试从此集群恢复多线程备份失败,因为一个 LDM 的数据文件仅包含 12 字节的数据文件头,ndb_restore无法读取。在其他情况下也会出现同样的问题,比如在线添加一个空节点后立即进行备份。
发现这个是在
ODirect
启用了EOF备份数据文件写入,其大小小于512字节且备份处于该STOPPING
状态时出现的。这通常只发生在中止的备份中,但也可能发生在 LDM 没有碎片的成功备份中。我们通过引入额外的检查来解决这个问题,以确保只有当备份实际上包含一个应该导致它中止的错误时才会跳过写入。(缺陷号 29892660)参考资料:另请参阅:Bug #30371389。
-
在某些情况下
SignalSender
,用作ndb_mgmd和 实现的一部分的类会ndbinfo
缓冲过多数量的不需要SUB_GCP_COMPLETE_REP
和API_REGCONF
信号,从而导致不必要的内存消耗。(漏洞 #29520353)参考资料:另请参阅:Bug #20075747、Bug #29474136。
BackupLogBufferSize
不接受配置参数 的设置 。(漏洞 #29415012)-
每当节点关闭时,都会重新计算最大全局检查点 (GCP) 提交延迟和 GCP 保存超时,以考虑数据节点数量的变化。当阈值降低到先前的值以下时,这可能会导致可行节点的意外关闭。(漏洞#27664092)
参考资料:另请参阅:Bug #26364729。
-
插入子行的事务可以与删除该子行的父行的事务同时运行。在这种情况下,应该中止其中一个事务,以免产生孤立的子行。
在提交对子行的插入之前,会触发对父行的读取以确认父行存在。类似地,在父行上提交删除之前,执行读取或扫描以确认不存在子行。当插入和删除事务同时运行时,它们的准备和提交操作可以以两个事务都提交的方式进行交互。发生这种情况是因为触发读取是使用
LM_CommittedRead
锁执行的(参见 参考资料NdbOperation::LockMode
),锁的强度不足以防止此类错误场景。通过对两个触发读取使用更强的
LM_SimpleRead
锁定模式来解决此问题。使用LM_SimpleRead
rather thanLM_CommittedRead
locks 确保在涉及并发插入子行和从父行删除的事务的每种可能场景中至少有一个事务中止。(缺陷号 22180583) 同一 SQL 节点上的并发
SELECT
和ALTER TABLE
语句有时会在等待释放锁时相互阻塞。(错误#17812505,错误#30383887)