Documentation Home
MySQL NDB Cluster 7.5 发行说明  /  MySQL NDB Cluster 7.5.4 (5.7.16-ndb-7.5.4) 的变化(2016-10-18,全面上市)

MySQL NDB Cluster 7.5.4 (5.7.16-ndb-7.5.4) 的变化(2016-10-18,全面上市)

MySQL NDB Cluster 7.5.4 是 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.16 在主线 MySQL 5.7 中添加的所有错误修复和功能更改(请参阅MySQL 5.7.16 中的更改(2016-10- 12、普遍适用))。

添加或更改的功能

  • 重要变更;打包: 为 MySQL NDB Cluster 提供的 RPM 的命名和组织已更改,以与为 MySQL 服务器发布的那些相一致。所有 MySQL NDB Cluster RPM 包名称现在都以mysql-cluster. 现在使用data-node包安装数据节点;管理节点现在从 management-server包中安装;和 SQL 节点需要servercommon包。 重要提示:SQL 节点必须使用mysql-cluster这些 RPM 的版本;为标准 MySQL 服务器发布的版本不提供对NDB存储引擎的支持。所有客户端程序,包括mysql 客户端和ndb_mgm管理客户端,现在包含在clientRPM 中。

    有关更多信息,请参阅 从 RPM 安装 NDB Cluster

  • 重要更改: 添加了PARTITION_BALANCEFOR_RA_BY_LDM_X_2FOR_RA_BY_LDM_X_3FOR_RA_BY_LDM_X_4,它们可用于将每个本地数据管理器使用的分区数分别设置为两个、三个和四个分区,此外还添加了 FOR_RA_BY_LDM,将此数量设置为一个。

    用于设置表使用MAX_ROWS的分区数的使用NDB现在已弃用,并且在未来的 MySQL NDB Cluster 版本中将被删除。

    有关详细信息,请参阅 设置 NDB 注释选项。(缺陷 #81759,缺陷 #23544301)

  • MySQL NDB ClusterJ: 为了帮助应用程序更好地处理数据库错误, ClusterJDatastoreException该类中添加了许多新功能:

    • 一个新方法 ,从 对象 getCode()返回 。codeNdbError

    • 一个新方法 ,从 对象 getMysqlCode()返回 。mysql_codeNdbError

    • 一个新的子类, ClusterJDatastoreException.Classification使用户能够解码来自的结果 getClassification()。该方法 给出了NDB Error ClassificationsClassification.toString()中列出的错误分类的名称 。

    (漏洞 #22353594)

  • 为MySQL NDB Cluster 发行版中包含的ndb_restore程序 添加了--print-sql-log 选项。该选项使程序将 SQL 语句记录到. stdout

    请注意,以这种方式恢复的每个表都必须有一个明确定义的主键;NDB存储引擎实现的隐藏主键不足以实现此目的。(漏洞 #13511949)

  • 对于完全复制的表,ndb_desc仅显示包含分区的主要片段副本的节点;仅具有复制片段副本的节点将被忽略。为了使此信息在mysqlndbinfo客户端中可用,在信息数据库中引入了几个新表 。此处列出了这些表格,并附有简要说明:

    • dict_obj_info提供 中数据库 ( DICT) 对象的名称和类型NDB,例如表和索引,以及适用时有关父对象的信息

    • table_distribution_status 提供NDB表分布状态信息

    • table_fragments提供有关NDB 表碎片 分布的信息

    • table_info提供有关日志记录、检查点、存储和其他对每个NDB表 有效的选项的信息

    • table_replicas提供有关片段副本的信息。

    有关详细信息,请参阅 ndbinfo:NDB Cluster 信息数据库。(缺陷 #81762,缺陷 #23547643)

修正错误

  • 重要更改:服务器选项 的默认值 --ndb-default-column-format 已从更改DYNAMICFIXED。这样做是为了向后兼容。仅更改了默认值;将此选项设置为DYNAMIC继续导致 DYNAMIC被用于 ROW_FORMAT并且 COLUMN_FORMAT除非被覆盖。(漏洞 #24487363)

  • 重要变化: 事件缓冲区状态报告已通过更改计算滞后或滑移的语义得到改进。延迟不再定义为落后的纪元数,而是现在被视为完全缓冲在事件缓冲区中但尚未被 binlog 注入器线程消耗的纪元数。作为这项工作的一部分, ndb_report_thresh_binlog_epoch_slip 系统变量的默认值已从 3 增加到 10。有关更多信息,请参阅文档中对此变量的描述,以及 集群日志中的事件缓冲区报告。(漏洞 #22916457)

    参考资料:另请参阅:Bug #22901309。

  • NDB Cluster API:Ndb当同时创建和删除对象 时,可能会发生事务 ID 的重用 作为此修复的一部分,NDB API 方法 lock_ndb_objects()unlock_ndb_objects 现在声明为const. (漏洞 #23709232)

  • NDB Cluster API: 当管理服务器在运行持续监视事件的 MGM API 应用程序时重新启动时,后续事件不会报告给应用程序,无限期返回超时而不是错误。

    发生这种情况是因为事件侦听器的套接字在重新启动mgmd时未关闭。这是通过确保在管理服务器关闭时关闭事件侦听器套接字来解决的,这会导致应用程序使用诸如 ndb_logevent_get_next()在重新启动后收到读取错误之类的功能。(漏洞#19474782)

  • NDB Cluster APIs: 为了处理传入的信号,想要充当接收者的线程必须从传输层获得轮询权。这可以被请求并分配给一个单独的接收线程,或者每个客户端线程在等待结果时都可以扮演接收者的角色。

    当充当轮询所有者的线程接收到足够数量的数据时,它会释放在向它们传递信号时占用的任何其他客户端的锁。这可以使它们再次运行,并且操作系统调度程序可以决定是时候唤醒它们了,这是以轮询所有者线程为代价的,轮询所有者线程反过来被排除在 CPU 之外,但仍然持有轮询权。在此修复之后,在解锁和向其他线程发送信号之前,线程会释放轮询权。这使得轮询权可用于在此 CPU 上主动执行的其他线程。

    此更改增加了轮询接收器数据时的并发性,这也应该减少等待被唤醒的客户端的延迟。(漏洞 #83129,漏洞 #24716756)

  • NDB Cluster API: libndbclientlibmysqlclient导出冲突的符号,导致在 Linux 上调试构建时出现分段错误。为解决此问题,中的冲突符号 libndbclient.so不再公开可见。由于此更改,版本号 libndbclient.so已从 6.0.0 提高到 6.1.0。(漏洞 #83093,漏洞 #24707521)

    参考资料:另请参阅:Bug #80352、Bug #22722555。

  • NDB Cluster API:NDB给定的启用模式对象所有权检查时 NdbTransaction,将检查此事务使用的对象以确保它们属于NdbDictionary此连接所拥有的。尝试在 不属于同一连接的表或索引上 NdbOperationNdbScanOperationNdbIndexScanOperation

    此修复更正了资源泄漏,当要创建的操作对象在检查架构对象所有权之前分配并且随后在对象创建失败时未释放时发生。(漏洞 #81949,漏洞 #23623978)

    参考资料:另请参阅:Bug #81945、Bug #23623251。

  • NDB Cluster APIs: NDB API 对象是在一个对象的上下文中分配的 Ndb,或者是在一个 NdbTransaction对象本身拥有的Ndb对象的上下文中分配的。当一个给定的 Ndb对象被销毁时,所有剩余的 NdbTransaction对象都将终止,并且此时Ndb 也应该释放与该对象相关的所有 NDB API 对象。发现,当 NdbTransaction 对象在其父 可能会发生Ndb从对象分配的对象泄漏NdbTransaction(但是, NdbTransaction对象本身并没有泄漏。)

    虽然建议(并且实际上建议)在 NdbTransaction其生命周期结束后立即显式关闭,但父 Ndb对象的销毁应该足以释放任何依赖于它的对象。现在,在如前所述的情况下,Ndb析构函数会检查以确保从给定 Ndb实例派生的所有对象都已真正释放。(漏洞 #81945,漏洞 #23623251)

  • NDB Cluster API: 术语片段计数类型已被分区平衡取代。此更改会影响 NDB_TABLE选项NDB 以及 NDB API 中的选项。在 NDB_TABLE表选项语法中, FRAGMENT_COUNT_TYPE关键字被替换为 PARTITION_BALANCE. 在 NDB API 中, Table方法 getFragmentCountType()setFragmentCountType()已分别重命名为 getPartitionBalance()setPartitionBalance()getFragmentCountTypeString()重命名为 getPartitionBalanceString(). 此外,Object::FragmentCountType已更名为 PartitionBalance, 并且其枚举值的名称已更新为与新命名法一致。

    有关这些更改如何影响 NDB API 应用程序的更多信息,请参阅指示 TableObject成员说明。有关作为此修复的一部分所做的 SQL 级更改的更多信息,设置 NDB 注释选项。(缺陷 #81761,缺陷 #23547525)

    参考资料:另请参阅:Bug #83147、Bug #24733331。

  • NDB Cluster API: 在 MySQL NDB Cluster 发行版中包含的一些 NDB API 示例程序中,ndb_end()在调用 Ndb_cluster_connection 析构函数之前被调用。这会导致所有平台上的调试版本出现分段错误。受影响的示例程序也进行了广泛的修改和重构。有关详细信息,请参阅 NDB API 示例。(缺陷 #80352,缺陷 #22722555)

    参考资料:另请参阅:Bug #83093、Bug #24707521。

  • 如果在计算内部值时超过 4096 秒 NdbDuration::microSec(),这可能会导致断言警告计算将溢出。我们解决了这个问题,以避免在从内部滴答格式转换为微秒和纳秒时出现任何溢出或精度损失,方法是在对应于秒和几分之一秒的两部分中执行计算。(漏洞#24695026)

  • 串行提交协议——它在每个副本上单独和串行地提交每个操作,并被 DBTC内核块(参见 DBTC 块COMMIT)用于接管以及当事务在or阶段被判断为超时时 COMPLETE ——不支持LATE_COMMIT,这是READ_BACKUPFULLY_REPLICATED协议所必需的。(漏洞 #24681305)

  • 在某些情况下, ALTER TABLE ... REORGANIZE PARTITION可能会导致集群意外关闭。这是因为对于完全复制的表。假设日志部分 ID 与分区 ID 相同。这在使用时 FOR_RA_BY_LDM有效,但不一定适用于其他分区平衡类型。(漏洞 #24610551)

  • ALGORITHM=INPLACE在更改任何表的NDB_TABLE属性 时 使用(请参阅设置 NDB 注释选项)导致服务器失败。(漏洞 #24584741)

  • 在连续更新属性 的ALTER TABLE 语句之后(请参阅设置 NDB 注释选项),当前值并不总是由或ndb_desc显示。(漏洞 #24584690)NDB_TABLESHOW CREATE TABLE

  • FULLY_REPLICATED评论中的 关键字不区分大小写不 NDB_TABLE被接受。(漏洞 #24577931)

  • ALTER TABLE尝试同时设置FULLY_REPLICATEDand PARTITION_BALANCE(请参阅 设置 NDB 注释选项) 的语句失败,并出现乱码错误消息。(漏洞#24577894)

  • binlog 注入器线程和NDB实用程序线程之间的许多依赖关系——同步和其他问题的反复出现的来源——已被删除。此处列出了主要变化:

    • 将 binlog 注入器结构的设置从实用程序线程移动到注入器线程本身。

    • 删除了这些线程之间共享的一些实用程序和注入器线程结构。

    • 将实用程序线程的停止从注入器线程移动到其他此类线程停止的公共块中。

    • 删除了以前设计所需的一些 hack。

    • 删除了一些注入器互斥锁定和注入器条件信号,这些信号已因已列出的更改而过时。

    (错误号 24496910)

    参考资料:另请参阅:Bug #22204186。

  • ACK用于 FULLY_REPLICATED或 表 的延迟提交信号READ_BACKUP导致关联 ApiConnectionRecord具有无效状态。(漏洞 #24459817)

    参考资料:另请参阅:Bug #24444861。

  • 为磁盘上的表变满时发生的故障添加了缺失的错误信息。(漏洞 #24425373)

  • ndbmtd崩溃时,生成的错误日志错误地指定了线程 0 的跟踪名称,将不存在的后缀附加_t0到文件名。(缺陷号 24353408)

  • 传递不存在的节点 ID 会 CREATE NODEGROUP导致随机数据节点故障。(缺陷号 23748958)

  • DROP TABLE随后是节点关闭和随后的主节点接管——并且在接管之前包含的本地检查点尚未完成——导致 LCP 被忽略,在某些情况下,数据节点出现故障。(漏洞 #23735996)

    参考资料:另请参阅:Bug #23288252。

  • 删除了一个无效断言,其效果是在主事务中止后释放 API 连接记录时关闭所有级联子扫描。断言是无效的,因为在这种情况下关闭扫描在设计上与主事务异步,这意味着在主事务关闭后子扫描可能需要一些时间才能关闭。(缺陷号 23709284)

  • 尽管 DUMP命令的参数是 32 位整数,但ndb_mgmd在处理它们时仅使用了 10 个字节的缓冲区。(漏洞 #23708039)

  • 对表READ_BACKUP执行扫描时不遵守 该设置。BLOB(漏洞 #23703536)

  • 设置FULLY_REPLICATED=1(请参阅 设置 NDB 注释选项)不会传播到BLOB用于BLOBTEXT列的内部零件表。(漏洞 #23703343)

  • READ_BACKUP设置未应用于唯一索引。(漏洞 #23702848)

  • ReadCommitted模式下, DBSPJ读取表的主要片段副本READ_BACKUP(请参阅 设置 NDB 注释选项),即使本地片段可用也是如此。(缺陷号 23633848)

  • ALL REPORT MemoryUsage在使用完全复制的表时产生不正确的输出。(漏洞 #23539805)

  • 有序索引没有从索引表继承READ_BACKUP (请参阅设置 NDB 注释选项),这意味着有序索引扫描继续仅路由到主片段副本,而永远不会路由到备份片段副本。

    现在,当它将此信息分发到和 DBDICT的实例时,在表属性的有序索引上设置此属性。(漏洞 #23522027)DBTCDBSPJ

  • 更新包含虚拟列的表可能会导致二进制日志记录线程失败。(漏洞 #23514050)

  • 在代码库中发现并修复了许多潜在的缓冲区溢出问题NDB。(漏洞 #23152979)

  • 在从 MySQL NDB Cluster 7.3 版本在线升级到 NDB 7.4(或更高版本)版本期间,在本地检查点(LCP)期间以及升级这些节点之前,运行较低版本的几个数据节点出现故障,导致额外的节点升级后的故障。这是由于EMPTY_LCP作为 LCP-plus-restart 序列的一部分由旧节点启动的协议的挥之不去的元素,并且由于在这些版本中实现了 LCP 优化,NDB 7.4 和更高版本中不再使用它。(漏洞 #23129433)

  • SIGNAL_DROPPED_REP为响应长消息缓冲区耗尽而调用 的处理程序在SPJ内核块中定义,但实际上并未使用。这意味着 SimulatedBlock在这种情况下使用默认处理程序代替,关闭数据节点。(缺陷号 23048816)

    参考资料:另请参阅:Bug #23251145、Bug #23251423。

  • 当一个数据节点在系统重启期间没有足够的重做缓冲区时,它不会参与重启,直到其他节点已经启动。在此之后,它从其节点组中已经启动的节点执行其片段的接管;在此期间,集群已经在运行并且可以进行用户活动,包括 DML 和 DDL 操作。

    在系统重启期间,表创建在DIH内核块中的处理方式与正常情况不同,因为这种创建实际上包括从主节点上的磁盘重新加载表定义数据。因此,DIH 假设在所有节点重新启动之前发生的任何表创建都必须与重新启动相关,因此始终在主节点上。但是,在接管期间,由于用户活动,可能会在非主节点上创建表;发生这种情况时,集群会强制关闭。

    现在在系统重启期间进行额外检查以检测在这种情况下执行节点是否是主节点,并使用该信息来确定表创建是适当重启的一部分,还是在后续接管期间发生。(缺陷号 23028418)

  • ndb_restoreMAX_ROWS为在进行备份之前未设置的表设置 (漏洞 #22904640)

  • 每当将数据节点添加到集群或从集群中删除时,NDB内核的事件 API 都会使用SUB_GCP_COMPLETE_REP 带有ADD(add) 标志或 SUB(drop) 标志集的信号以及要添加或删除的节点数来通知此情况;这允许为每个不完整的桶NDB保持正确的未决信号计数 。SUB_GCP_COMPLETE_REP除了处理与添加或删除相关联的时期的桶之外,它还必须补偿与以后的时期相关的任何后来的不完整的桶。尽管有可能不按顺序完成这些桶,但没有对这些桶进行处理,导致活动接待出现停滞。

    此修复程序添加了对此类无序存储桶完成的检测和处理。(缺陷号 20402364)

    参考资料:另请参阅:Bug #82424、Bug #24399450。

  • 执行表的联机重组时,唯一索引不包括在重组中。(漏洞 #13714258)

  • 在非常高的负载下,接收线程和任何用户线程都没有足够的能力来正确处理轮询所有权。这意味着,随着负载和活动线程数量的增加,维持吞吐量变得更加困难。此修复尝试增加接收线程的优先级,并在成功时保留轮询所有权。

    此修复需要足够的权限才能启用。在 Linux 系统上,这意味着确保数据节点二进制文件或其运行的用户有权更改 nice 级别。(缺陷 #83217,缺陷 #24761073)

  • 当从包含具有外键的表的数据库中恢复备份时,ndb_restore禁用数据的外键,但不禁用日志。(漏洞 #83155,漏洞 #24736950)

  • 对于使用多个节点组的完全复制表,唯一索引和 blob 表的本地读取无法正常工作。(漏洞 #83016,漏洞 #24675602)

  • ALTER TABLE 重新启动集群后,更改要使用的表 的语句的效果READ_BACKUP 不会保留。(缺陷 #82812,缺陷 #24570439)

  • 使用FOR_RP_BY_NODEor FOR_RP_BY_LDMfor PARTITION_BALANCE不适用于完全复制的表。(缺陷 #82801,缺陷 #24565265)

  • READ_BACKUP设置的更改未传播到内部 blob 表。(漏洞 #82788,漏洞 #24558232)

  • c_exec表中列 显示的计数ndbinfo.threadstat不完整。(漏洞 #82635,漏洞 #24482218)

  • 使用(请参阅 设置 NDB 注释选项)创建的表 的默认PARTITION_BALANCE设置 已从更改为 。(漏洞 #82634,漏洞 #24482114)NDBREAD_BACKUP=1FOR_RA_BY_LDMFOR_RP_BY_LDM

  • 内部函数 ndbcluster_binlog_wait()提供了一种方法来确保来自给定线程的所有事件都到达二进制日志中,SHOW BINLOG EVENTS在重置二进制日志时使用。此函数等待注入器条件,而处理的最新全局纪元NDB比本会话中最后提交的纪元更新,这意味着每当二进制日志线程完成并更新新的最新全局纪元时,必须发出此条件信号。检查代码显示缺少此条件信号,并且客户端线程不会在新的最新全局纪元完成(~100 毫秒)时被唤醒,而是等待最大超时(1 秒)。

    此修复添加了缺少的注入器条件信号,同时还将其更改为条件广播以确保所有客户端线程都收到警报。(缺陷 #82630,缺陷 #24481551)

  • 完全复制的内部外键或唯一索引触发器可能会触发多次,这会导致插入或删除操作的事务中止。发生这种情况是由于在预提交期间触发了冗余的延迟约束触发器。现在在这种情况下,我们确保在此阶段仅触发特定于唯一索引的触发器。(错误#82570,错误#24454378)

  • 由于内部触发器资源的高使用率(以及随后的耗尽),使用完全复制的表时备份可能会失败。为了弥补这一点,增加了NDB内核中为内部触发器保留的内存量,现在部分基于表的最大数量。(漏洞 #82569,漏洞 #24454262)

    参考资料:另请参阅:Bug #23539733。

  • 在内核DBTC函数 executeFullyReplicatedTrigger()NDB,错误的状态检查在某些情况下会导致在实际没有发生故障时进行故障处理。(缺陷 #82568,缺陷 #24454093)

    参考资料:另请参阅:Bug #23539733。

  • 当在内部触发器操作中LQHKEYREQ失败 返回时LQHKEYREF,不会检查触发器是否已完全复制,因此那些已完全复制的触发器永远不会被处理。(漏洞 #82566,漏洞 #24453949)

    参考资料:另请参阅:Bug #23539733。

  • 如果READ_BACKUP之前未设置,然后作为 ALTER TABLE ... ALGORITHM=INPLACE语句的一部分设置为 1,则更改不会传播到内部唯一索引表或 BLOB表。(漏洞 #82491,漏洞 #24424459)

  • 由于 mysql_cluster_move_privileges()mysql.proxies_priv表转换为 NDB. 其根本原因是 ALTER TABLE ... ENGINE NDB当此表包含非法TIMESTAMP 值时有时会失败的语句。(漏洞 #82464,漏洞 #24430209)

  • 内部变量m_max_warning_level未在 storage/ndb/src/kernel/blocks/thrman.cpp. 当未初始化的值被视为 0 时,这有时会导致节点在重启期间出现故障。(错误 #82053,错误 #23717703)

  • 通常,在执行系统重启时,所有节点都从重做日志和本地检查点 (LCP) 恢复,但在某些情况下,某些节点可能需要复制阶段才能完成系统重启。发生这种情况时,相关节点会等待所有其他节点完全启动,然后再执行复制阶段。尽管事实上可以在到达DBDIH块中的开始阶段 4 之前开始本地检查点,但 LCP 状态IDLE在所有情况下都被初始化为,这可能导致节点故障。现在,当执行这种系统重启变体时,LCP 状态不再初始化。(漏洞 #82050,漏洞 #23717479)

  • 在线添加新节点组并执行 ALTER TABLE ... ALGORITHM=INPLACE REORGANIZE PARTITION后,未为新分片正确设置分区 ID。

    在作为解决此问题的一部分所做的相关更改中, ndb_desc -p 现在按分区 ID 的顺序显示与分区相关的行。(缺陷 #82037,缺陷 #23710999)

  • 执行STOP BACKUP时,有时可能会在备份过程实际终止之前将几个字节写入备份数据文件。使用 时ODIRECT,这会导致返回错误的错误代码。O_DIRECT现在在这种情况下,除非对齐正确,否则不会向文件写入任何内容。(漏洞 #82017,漏洞 #23701911)

  • 当事务协调器 (TC) 连接记录用完时,可以只处理本地检查点和备份的扫描,因此来自 DBUTIL块的 操作(ALTER TABLE ... REORGANIZE PARTITION用于重组元数据的操作和其他重组元数据的操作)被不必要地阻止。此外,当 TC 记录用完时,并不总是会重试此类操作。为了解决这个问题,许多操作记录现在被指定用于DBUTIL使用,以及 LCP 和备份使用,这样这些操作也不会受到来自 DBUTIL.

    有关详细信息,请参阅 DBUTIL 块。(漏洞 #81992,漏洞 #23642198)

  • 在同一事务中对同一行执行多次更新的操作有时会导致页条目长度损坏。(缺陷 #81938,缺陷 #23619031)

  • 在节点重启期间,可以使用从本地检查点 (LCP) 获得的信息来恢复片段;在任何给定时间最多保留 2 个可恢复 LCP。当 LCP 向DIH内核块报告已完成,但节点在写入此 LCP 的最后一个全局检查点索引实际完成之前发生故障时,最新的 LCP 不可恢复。尽管应该可以使用较旧的 LCP,但假设该片段不存在 LCP,这会减慢重启过程。现在在这种情况下,使用较旧的可恢复 LCP,这应该有助于减少较长的节点重启时间。(漏洞 #81894,漏洞 #23602217)

  • 启用时不考虑 优化节点选择(ndb_optimized_node_selection 设置) 。ndb_data_node_neighbour(漏洞 #81778,漏洞 #23555834)

  • NDB如果由于超时(默认 3000 毫秒)而失败,则不再重试全局模式锁,并且此锁请求有可能参与元数据锁-全局模式锁死锁。现在在这种情况下,它选择自己作为受害者,并将决定返回给元数据锁的请求者,然后元数据锁请求者将请求作为失败的锁请求处理(最好是无限期地保持死锁),或者在存在死锁处理程序的情况下, 重试元数据锁-全局模式锁。(缺陷 #81775,缺陷 #23553267)

  • 在哈希映射的实现中发现了两个问题——用于NDB将表行的哈希值映射到分区——用于完全复制的表:

    1. 散列映射是根据片段数而不是分区数来选择的。以前未检测到这一点,因为对于其他类型的表,这些值始终相同。

    2. 散列映射用作分区到分区映射,使用表行的散列值模分区计数作为输入。

    此修复解决了刚才描述的两个问题。(缺陷 #81757,缺陷 #23544220)

    参考资料:另请参阅:Bug #81761、Bug #23547525、Bug #23553996。

  • 在尝试使用 mysql_upgrade 时, 将mysqld--initialize导致 稍后出现问题。使用 运行时,服务器不需要支持,启用它可能会导致 表出现问题。为了防止这种情况发生,如果还指定了后者 , 现在使用该选项会导致mysqld忽略该 选项。--ndbcluster--initializeNDBndbinfo--initialize--ndbcluster

    此问题仅影响从 MySQL NDB Cluster 7.5.2 或 7.5.3 升级。如果此类升级由于前面概述的原因而失败,您可以通过在整个集群滚动重启后 删除.frm目录中的所有文件 ,然后运行​​mysql_upgrade来解决此问题。(漏洞 #81689,漏洞 #23518923)data/ndbinfo

    参考资料:另请参阅:Bug #82724、Bug #24521927。

  • mysqld在处理程序初始化期间等待连接到管理服务器时 NDB,不可能关闭mysqld。如果mysqld 无法建立连接,它可能会在此时卡住。这是由于实用程序和索引统计线程中的内部等待条件可能会无限期地得不到满足。此条件已增加 1 秒的最大超时,这使得这些线程更有可能在这种情况下正确终止自身。

    此外,等待管理服务器连接的连接线程在刚才描述的情况下执行了 2 次睡眠,而不是预期的 1 次睡眠。(漏洞 #81585,漏洞 #23343673)

  • ALTER TABLE ... ALGORITHM=INPLACE在完全复制的表上没有复制关联的触发器 ID,导致DBDICT内核块失败。(缺陷 #81544,缺陷 #23330359)

  • 准备中止请求时创建的延迟树节点查找请求列表在DBSPJ完成时不会被清除,这可能导致延迟操作即使在DBSPJ 请求中止后也会启动。(缺陷 #81355,缺陷 #23251423)

    参考资料:另请参阅:Bug #23048816。

  • 实现了错误和中止处理, 以便在传入信号处理完成之前调用Dbspj::execTRANSID_AI()其方法。abort()由于此方法向 LDM 发送信号,因此这部分覆盖了后来 所需的信号内容 execTRANSID_AI()。这可能会导致中止的DBSPJ请求过早地或根本不清理它们分配的资源。(缺陷 #81353,缺陷 #23251145)

    参考资料:另请参阅:Bug #23048816。

  • MySQL NDB Cluster 7.5.2 中添加的读取备份功能可以从备份片段副本中读取,但未用于带锁读取,或用于将 BLOB锁升级为带锁读取的表或唯一键表的读取。现在 TCKEYREQSCAN_TABREQ 信号使用标志来传达有关此类锁的信息,从而可以在由于读取 BLOB 表的基表或读取 BLOB 表而升级读取锁时从备份片段副本读取一个独特的钥匙。(漏洞 #80861,漏洞 #23001841)

  • 分区表的主分片副本在节点组和本地数据管理器之间分布不均。

    作为此问题修复的一部分,单个 MySQL NDB Cluster 支持的最大节点组数(之前未确定)现在设置为 48 ( MAX_NDB_NODE_GROUPS)。(缺陷 #80845,缺陷 #22996305)

  • 代码库中的几个对象构造函数和类似函数在 NDB创建新实例时并不总是执行健全性检查。这些检查现在是在这种情况下进行的。(错误#77408,错误#21286722)

  • malloc()未检查对 的内部调用NULL。函数调用被直接写入所取代。(错误#77375,错误#21271194)