MySQL NDB Cluster 9.7.4 is a new release of NDB
Cluster, based on MySQL Server 9.7 and including features in
version 9.7 of the NDB storage
engine, as well as fixing recently discovered bugs in previous NDB
Cluster releases.
Obtaining MySQL NDB Cluster 9.7. NDB Cluster 9.7 source code and binaries can be obtained from https://dev.mysql.com/downloads/cluster/.
For an overview of major changes made in NDB Cluster 9.7, see What is New in MySQL NDB Cluster 9.7.
This release also incorporates all bug fixes and changes made in previous NDB Cluster releases, as well as all bug fixes and feature changes which were added in mainline MySQL 9 through MySQL 9.7.4 (see Changes in MySQL NDB Cluster 9.7.4 (2026-10-22)).
ndb_restorenow supports--log-parallelism=Nto control concurrent backup log-event application independently of--parallelism, which continues to control DATA row application. The default value, 0, inherits--parallelism; valid values range from 0 through the number of backup parts multiplied by 1024 and may be higher or lower than--parallelism. Operations on the same row remain serialized. Temporary LOG restore errors now use retry accounting and geometric backoff aligned with DATA restore. (Bug #39930283)The
ndbinfo.transporter_activityactivity histograms now use fixed boundaries ranging from 100 milliseconds through 80 seconds instead of boundaries derived from each link's heartbeat interval. This keeps histogram boundaries consistent across links with different heartbeat settings and permits meaningful histograms without heartbeating. (Bug #39538065)HeartbeatIntervalDbApican now be overridden in individual API-node configuration sections, allowingndbmysqland application SQL nodes to use different heartbeat intervals. Nodes without an override retain the global DB/default value. Data nodes track the effective interval for each API node and use it forndbinforeporting and late-heartbeat detection while remaining compatible with olderAPI_REGREQsignals. (Bug #38703055)
During an NDB redo-log file change, a metadata-page write could incorrectly mark a buffered GCI completion record as flushed. If subsequent redo activity stopped, the record could remain buffered, preventing the GCP save protocol from advancing. (Bug #39966600)
NDB data nodes consumed approximately 4100 unnecessary bytes for every LQH fragment record because a debug-only lock array remained present in runtime builds. The array is no longer included, reducing data-node memory consumption. (Bug #39899970)
Fixed an issue relating to NDB management-server logging controls. (Bug #39832141)
-
ndb_restorecould remain running indefinitely after a permanent error or exhausted retries while concurrently applying backup log records, without a success or failure result. Restore threads now signal failure, allowing the process to exit promptly. Errors were returned similar to the following:Redo log part ... problem started : Low space Redo log part ... problem started : Next file not open on time Gci record write is waiting for the redo log file to be changed(Bug #39672125)
-
ndb_restorecould abort when restoring an old-format compressed NDB backup containing at least 4 GB of uncompressed data because the truncated size in the AZ31 header did not match the full decompressed byte count. The consistency check now compares the low 32 bits for these files. Errors were returned similar to the following:2026-06-25 16:32:13 Warning: All data was not read, can not check file consistency. Data read 12616794112 of 4026859520 bytes. storage/ndb/tools/restore/Restore.cpp:1430: require((!m_xfile.is_open())) failed AbortedThe
ndbxfrmutility also adds the--keep-fileoption and a warning for size-check inconsistencies. (Bug #39658762) On multithreaded
ndbmtdconfigurations whereDIHandTCorSPJran on different threads, node failure could cause new work to be sent to the failed node before it was marked unavailable. This could result in unanswered signals, timeouts, lingering transaction state, or assertion failures. Node-failure processing now completes the local availability updates before notifying upper-layer blocks. (Bug #39574448)-
Large transactions that repeatedly updated the same row, particularly when ordered indexes were present, could require enough commit or rollback cleanup to exceed the watchdog threshold and restart a data node. The new
MaxRowVersionsPerTransactiondata-node parameter limits the number of versions of one row that a transaction may prepare. The default value is 1000, and the valid range is 3 through 16383. ChangingMaxRowVersionsPerTransactionrequires a data-node restart.Reaching the limit returns
NDB error 927before the watchdog-prone cleanup path:NDB error 927: Too many row versions in one transaction (increase MaxRowVersionsPerTransaction)(Bug #39559817)
-
During NDB upgrades, restarting SQL pods could intermittently fail to obtain an NDB node ID, causing repeated pod restarts or
mysqldshutdown. The temporary node-ID allocation condition is now retried instead of being treated as a permanent failure. Errors were returned similar to the following:[ERROR] [MY-010865] [NDB] Failed to initialize connection(s) [ERROR] [MY-010865] [NDB] Failed to initialize ndbcluster, aborting!(Bug #37355499)
-
During a rolling restart or data-node failure, transaction coordinator takeover could crash the master data node while rolling forward a transaction from an older global checkpoint after a newer checkpoint had opened. Errors were returned similar to the following:
Error: 2341 Error data: Can not find global checkpoint record for commit.Takeover can now reopen the missing older checkpoint record and recover the transaction without crashing the master data node. (Bug #36907359)