MySQL NDB Cluster 7.4.8是MySQL NDB Cluster 7.4的一个新版本,基于MySQL Server 5.6,包含了该版本7.4的特性NDB
存储引擎,以及修复在以前的NDB集群版本中最近发现的错误。
获取MySQL NDB Cluster 7.4。MySQL NDB Cluster 7.4的源代码和二进制文件可以从10bet博彩公司 .
有关MySQL NDB Cluster 7.4中所做更改的概述,请参阅NDB集群7.4有什么新内容.
该版本还包含了之前NDB集群版本中所做的所有bug修复和更改,以及从MySQL 5.6到MySQL 5.6.27主线中添加的所有bug修复和特性更改MySQL 5.6.27(2015-09-30,通用可用性)).
不兼容的更改:这里列出的更改是在MySQL NDB Cluster 7.4.7中所做工作的基础上进行的,以改进在插入过载条件下对本地检查点(lcp)的处理:
对应用于备份和lcp的数据缓冲区的一些参数的最小值进行了更改。下面列出的这些参数不能再设置,从而导致系统无法运行:
BackupDataBufferSize
:最小值从0增加到2M。BackupLogBufferSize
:最小值从0增加到2M。BackupWriteSize
:最小值从2K增加到32K。BackupMaxWriteSize
:最小值从2K增加到256K。
此外,
BackupMemory
data节点参数现在已弃用,并将在未来的MySQL NDB集群版本中删除。使用BackupDataBufferSize
而且BackupLogBufferSize
代替。当备份由于资源不足而失败时,后续重试仅对在同一线程中工作的备份部分有效,因为延迟信号仅在同一线程中支持。在这种情况下,延迟信号不再发送到其他线程。
用于搜索排队扫描的内部列表对象的实例在调用可以操作用于创建它的基本对象的函数之前实际上没有被销毁。
ACC扫描在范围扫描的类别中排队,这可能导致启动ACC扫描
DBACC
没有空闲的扫描槽。我们通过为ACC扫描实现一个单独的队列来解决这个问题。
(Bug #76890, Bug #20981491, Bug #77597, Bug #21362758, Bug #77612, Bug #21370839)
参考文献:参见Bug #76742, Bug #20904721。
重要的变化;NDB复制:添加了
create_old_temporals
服务器系统变量补充系统变量avoid_temporal_upgrade
而且show_old_temporals
在MySQL 5.6.24中引入,并且在从NDB 7.3.9和NDB 7.4.6开始的MySQL NDB集群中可用。启用create_old_temporals
原因mysqld在创建任何文件时使用MySQL 5.6.4之前使用的存储格式日期
,DATETIME
,或时间戳
列—也就是说,在不支持小数秒的情况下创建列。create_old_temporals
默认禁用。系统变量是只读的;若要启用5.6.4以前版本的时态类型,请设置等效选项(——create-old-temporals
)或MySQL服务器读取的选项文件中。create_old_temporals
仅在MySQL NDB集群中可用;标准的MySQL 5.6服务器不支持它。它旨在促进从MySQL NDB Cluster 7.2升级到MySQL NDB Cluster 7.3和7.4,之后受影响类型的表列可以升级到新的存储格式。create_old_temporals
已弃用,计划在未来的MySQL NDB集群版本中删除。avoid_temporal_upgrade
还必须启用此功能才能正常工作。您还应该启用show_old_temporals
也有关更多信息,请参阅这些变量的描述。有关MySQL临时类型更改的更多信息,请参见日期和时间类型存储要求.(错误# 20701918)参考文献:参见Bug #21492598, Bug #72997, Bug #18985760。
当
——数据库
选项未指定ndb_show_tables中没有找到表TEST_DB
数据库,一个适当的警告消息现在发出。(Bug #50633, Bug #11758430)
重要的变化;NDB集群接口:MGM API错误处理函数
ndb_mgm_get_latest_error ()
,ndb_mgm_get_latest_error_msg ()
,ndb_mgm_get_latest_error_desc ()
当与a一起使用时,每一个都失败了零
句柄。您应该注意,尽管这些函数现在是空安全的,但在这种情况下返回的值是任意的,没有意义。(Bug #78130, Bug #21651706)重要的变化:当ndb_restore没有运行
——disable-indexes
或——rebuild-indexes
在具有唯一索引的表上,可能会按导致重复值的顺序恢复行,从而导致重复键错误而失败。运行ndb_restore
在这样的表上现在需要使用至少一个选项;如果不这样做,现在将导致错误。(Bug #57782, Bug #11764893)参考文献:参见Bug #22329365, Bug #22345748。
NDB复制:在使用冲突检测和解决时
NDB EPOCH2_TRANS美元()
,删除-删除冲突没有以事务的方式处理。(错误# 20713499)NDB集群接口:在执行
dropEvent ()
,如果协调器DBDICT
订阅管理器(SUMA
Block)已经删除了所有订阅,但在协调器从系统表中删除事件之前,已删除的事件仍保留在表中,导致后续任何同名的删除或创建事件都失败NDB
错误1419订阅已取消错误是746事件名称已经存在.即使在调用时也会发生这种情况dropEvent ()
用一个非零力参数。在这种情况下,错误1419会被忽略
DBDICT
从表中删除事件。(错误# 21554676)NDB集群接口:如果分配给事件缓冲区的内存总量超过大约40 MB,那么内存使用率百分比的计算可能会在计算期间溢出。这是因为相关的例程使用32位算术;现在这个已经改成了use
Uint64
值来代替。(Bug #78454, Bug #21847552)NDB集群接口:的
nextEvent2 ()
方法继续返回异常事件,例如TE_EMPTY
,TE_INCONSISTENT
,TE_OUT_OF_MEMORY
用于已经被删除的事件操作。(Bug #78167, Bug #21673318)NDB集群接口:在集群故障后节点的初始重新启动之后,当重新启动之前存在的事件稍后被删除时,作为重新启动过程一部分添加的集群故障事件将被删除。这意味着,在这种情况下,事件API客户端无法知道是否需要进行故障处理。此外,GCI用于删除事件操作的最终清理,由
pollEvents ()
而且nextEvent ()
当这些方法消耗了所有可用事件时,将丢失。(Bug #78143, Bug #21660947)NDB集群接口:当向事件队列中插入一个完整的事件缓冲区历时,并不总是更新表示最新全局检查点的内部值。这导致后续调用
Ndb: pollEvents ()
而且pollEvents2 ()
当试图为事件缓冲区中可用的事件获取正确的GCI时,将失败。这也可能导致后续调用nextEvent ()
或nextEvent2 ()
看到了尚未被发现的事件。(Bug #78129, Bug #21651536)mysql_upgrade从MySQL NDB Cluster 7.2升级到MySQL NDB Cluster 7.4失败。这个问题的根本原因是代码的意外重复
mysql_fix_privilege_tables.sql
导致ndbinfo_offline
模式过早关闭,这反过来又导致了后续的创建视图
语句失败。(错误# 21841821)ClusterMgr
是NDB API的内部组件ndb_mgmd过程,是TransporterFacade
—它又是围绕传输器注册中心的包装器—并与数据节点共享。该组件负责许多任务,包括连接设置请求;发送和监测心跳;提供节点状态信息;处理集群断开和重新连接;和转发集群状态指示灯。ClusterMgr
维护活动节点的计数,该计数在接收节点已连接(reportConnected ()
方法调用),并在收到节点已断开连接的报告时递减(reportDisconnected ()
)TransporterRegistry
.这个计数是在内部检查的reportDisconnected ()
来验证它是否大于零。当节点连接由于发送缓冲区耗尽(以及其他潜在原因)而非常短暂,并且刚刚描述的检查失败时,此处所讨论的问题就出现了。发生这种情况的原因是,当一个节点没有完全连接时,连接尝试仍然可能触发
reportDisconnected ()
尽管事实上连接还没有被报告给ClusterMgr
;因此,配对reportConnected ()
而且reportDisconnected ()
调用没有得到保证,这可能导致连接的节点数被设置为零,即使仍然有节点实际上是连接的,导致MySQL NDB集群的调试版本的节点崩溃,以及潜在的错误或其他负面影响的发布版本。为了解决这个问题,
ClusterMgr: reportDisconnected ()
现在,在检查并减少已连接节点的数量之前,验证已断开连接的节点实际上已经完全完成连接。(Bug #21683144, Bug #22016081)参考文献:参见Bug #21664515, Bug #21651400。
减少节点的环回传输器与传输器注册表断开连接的可能性
reportError ()
由于发送缓冲区耗尽(由Bug #21651400的修复实现),发送缓冲区的一部分现在被保留给这个传输器使用。(Bug #21664515, Bug #22016081)参考文献:参见Bug #21651400, Bug #21683144。
环回传输器类似于TCP传输器,但节点使用环回传输器向自身发送信号,作为许多内部操作的一部分。与TCP传输器一样,它可能会由于某些条件(包括发送缓冲区耗尽)而断开连接,但这可能会导致阻塞
TransporterFacade
所以会在一个ndb_mgmd或API节点进程。为了防止这种情况,一个环回传输器断开连接的节点现在只需关闭,而不允许节点进程挂起。(Bug #21651400, Bug #22016081)参考文献:参见Bug #21683144, Bug #21664515。
内部
NdbEventBuffer
对象的活动订阅计数(m_active_op_count
)可以在此操作失败时(例如,由于服务器繁忙而重试)停止订阅时减少不止一次。当与数据节点的通信失败时,如发生超时时,此计数的递减也可能失败。(错误# 21616263)这个问题是一个Bug #20575424, Bug #20561446的回归。
在某些情况下,管理服务器守护进程在启动时失败而不报告原因。现在,当ndb_mgmd由于错误而无法启动,则将错误消息打印到
stderr
.(错误# 21571055)在有多个LDM实例的MySQL NDB集群中,所有实例都写入节点日志,即使是其他节点上未激活的实例。在重新启动过程中,这会导致日志被来自其他节点的消息填满,例如如下所示的消息:
2015-06-24 00:20:16 [ndbd] INFO—我们正在调整最大磁盘写速度,一个重启正在进行中…2015-06-24 01:08:02 [ndbd] INFO—我们正在调整最大磁盘写速度,没有重启正在进行中
现在,只由活动LDM实例执行此日志记录。(错误# 21362380)
备份时,备份块状态报告错误。(错误# 21360188)
参考文献:参见Bug #20204854, Bug #21372136。
添加了
BackupDiskWriteSpeedPct
数据节点参数。设置此参数使数据节点保留其最大写速度的百分比(由的值决定)MaxDiskWriteSpeed
),以便在执行备份时在本地检查点使用。BackupDiskWriteSpeedPct
被解释为一个百分比,该百分比可以设置在0到90之间(包括90),默认值为50。(错误# 20204854)参考文献:参见Bug #21372136。
在给定全局检查点上,集群中的其他节点知道一个数据节点是活动的,但它的
sysfile
报告较低的GCI,较高的GCI用于确定数据节点可以重新创建哪个全局检查点。当启动的数据节点有一个干净的文件系统(GCI = 0)时,或者当它在其他节点后面超过多个全局检查点时,这将导致问题。现在,在这种情况下,只有当它最多领先一个GCI时,其他节点才会知道一个更高的GCI。(错误# 19633824)
参考文献:参见Bug #20334650, Bug #21899993。这个问题是:Bug #29167的回归。
类恢复一个或多个特定数据库时
——包括数据库
或——exclude-databases
选项,ndb_restore试图对数据库中的表应用外键,而这些表不在正在恢复的表之列。(错误# 18560951)从备份中恢复数据库模式后使用ndb_restore,具有多个语句的事务中恢复的表的自动发现无法正常工作,导致当试图获得锁时发现死锁;尝试重新启动事务错误。
这个问题在mysql客户端,以及当使用Connector/J和其他MySQL api的应用程序执行这些事务时。
在升级之前,这个问题可以通过执行
从information_schema中选择table_name, table_schema。engine = ' ndbcluster '的表
在执行任何其他语句之前,在恢复操作之后的所有SQL节点上执行。(错误# 18075170)的
inet_ntoa ()
函数内部使用在几个mgmd线程不是POSIX线程安全的,这意味着它返回的结果有时是未定义的。为避免此问题,使用线程安全和平台独立的包装器inet_ntop ()
用来代替这个函数。(错误# 17766129)ndb_desc与the连用
——extra-partition-info
而且——blob-info
选项在对包含一个或多个表运行时失败TINYBLOB
.列。(错误# 14695968)与内部事件数据缓冲区中的全局检查点相关的操作有时可能会泄漏内存。(Bug #78205, Bug #21689380)
参考文献:参见Bug #76165, Bug #20651661。
试图创造一个
NDB
当复合外键中的其中一列是表的主键并且该列还有唯一的键时,具有引用父表复合主键的复合外键的表将失败。(Bug #78150, Bug #21664899)当尝试启用索引统计时,创建所需的系统表、事件和事件订阅通常在多个时失败mysqld使用索引统计信息的进程在启动、重新启动或停止集群或节点故障处理时并发启动。这通常是可恢复的,因为受影响mysqld流程或多个流程可以(并且确实)稍后重试这些操作。因此,此类失败不再作为警告记录,而仅仅作为信息事件记录。(Bug #77760, Bug #21462846)
对象中添加唯一的键
NDB
当表已经有一个外键时,表失败。在升级之前,您可以通过先创建惟一键,然后使用单独的ALTER TABLE
声明。(Bug #77457, Bug #20309828)