Over the period, we have witnessed how MySQL versioning evolved from 8.0 to 9.7 LTS, and now it has entered a new era: a calendar-based model.
Let’s first take a brief look at how MySQL versioning has evolved over time.
After going through all those phases, we have finally reached a major shift in the overall versioning model. Instead of the next Innovation release to v9.8, Oracle switched to calendar versioning mode (Year.Month.Patch). So, the new Innovative release shipped as v26.7.0 instead of v9.8.
The new versioning model is denoted as Year.Month.Patch, or YY.M.P.
The same quarterly cycle is followed for each subsequent Innovative release; the only difference is that it now uses the calendar versioning model. For example, the next innovation release would tentatively be v26.10.0, scheduled for launch in October 2026.
The LTS release can also be considered roughly every 2 years under the new versioning model. The next LTS release in the new scheme is expected in April 2028 as 28.4.0.
The real advantage we see is that with the format (Year.Month.Patch), we can better assess when releases/packages were shipped and how they relate to overall release planning (Innovative/LTS, etc.). This was a problem with the previous versioning model, say 8.4/9.7, as we don’t get much clue or information.
This has no impact on the existing LTS (8.4/9.7); they will get the usual quarterly maintenance updates (bug fixes and security patches) while all Innovation or new features are offered under the new Calendar series.
E.g,
|
1 |
8.4.x LTS -> 9.7.x LTS -> 26.7.0 |
So if someone is still using an EOL version like 5.7, 8.0 has to follow the above path and upgrade to 8.4 LTS first.
The new change stream applier (CSA) introduces further improvements to parallel transaction scheduling and execution. The original model, Multi-threaded Applier (MTA), basically uses a coordinator to read transactions sequentially from the relay files and then hand them off to worker threads for parallel applying and execution. This can be a limitation, especially when a worker thread is waiting/sitting Idle for a commit due to any prior or dependency transaction.
Change stream applier (CSA) basically separates the transaction applying from commit ordering. For example, if a worker finishes applying a transaction but has to wait for the commit order, it can work on another dependency-ready transaction instead.
The replication configurations below are introduced by CSR adoption. Please note that it works for each channel separately.
|
1 2 3 |
APPLIER_VERSION - “1” denotes for MTA and “2“ denotes for CSA APPLIER_WORKER_COUNT - different worker count based on each replication channel APPLIER_EVENT_MEMORY_LIMIT - Per-channel memory limits for cached binlog events |
|
1 |
mysql> STOP REPLICA FOR CHANNEL 'mysql1'; |
|
1 2 3 4 5 6 7 |
mysql> CHANGE REPLICATION SOURCE TO APPLIER_VERSION = 2, APPLIER_WORKER_COUNT = 8, APPLIER_EVENT_MEMORY_LIMIT = 1073741824, REQUIRE_ROW_FORMAT = 1, GTID_ONLY = 1 FOR CHANNEL 'mysql1'; |
|
1 |
mysql> START REPLICA FOR CHANNEL 'mysql1'; |
|
1 2 |
Row-Based replication (binlog_format=ROW) GTID enforcement (gtid_mode=ON) |
The good news is that the Thread Pool Plugin is now available in MySQL Community releases, removing the previous dependency on the Enterprise Edition to use the Thread Pool mechanism.
MySQL traditionally uses a one-thread-per-connection model, where each client connection creates a dedicated server thread. This approach can become a problem when an application establishes a very large number of concurrent connections, especially when many of those connections are Idle/Sleep(waiting for work).
The Thread Pool addresses this by managing a high volume of client connections through a smaller number of worker threads. So, instead of creating a new thread for each connection, the Thread Pool uses the connections from the existing pool of threads and schedules their work across a controlled number of worker threads.
This could be useful in an environment where applications trigger a very high number of concurrent database connections, and simply increasing max_connections is not an option, as it would lead to excessive thread creation and resource consumption during database setup.
|
1 2 |
[mysqld] plugin-load-add=thread_pool.so |
|
1 |
bash> Systemctl restart mysql |
|
1 2 3 4 5 6 7 8 9 |
mysql > SELECT PLUGIN_NAME, PLUGIN_STATUS -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_NAME LIKE 'thread%'; +-------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------+---------------+ | thread_pool | ACTIVE | +-------------+---------------+ 1 row in set (0.004 sec) |
The thread pool size and other related parameters can be listed and configured as needed.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mysql> show variables like 'thread_pool%'; +----------------------------------------+-------+ | Variable_name | Value | +----------------------------------------+-------+ | thread_pool_algorithm | 1 | | thread_pool_connection_report_interval | 120 | | thread_pool_dedicated_listeners | OFF | | thread_pool_high_priority_connection | 0 | | thread_pool_longrun_trx_limit | 2000 | | thread_pool_max_active_query_threads | 0 | | thread_pool_max_transactions_limit | 192 | | thread_pool_max_unused_threads | 32 | | thread_pool_prio_kickup_timer | 1000 | | thread_pool_query_threads_per_group | 2 | | thread_pool_size | 6 | | thread_pool_stall_limit | 6 | | thread_pool_transaction_delay | 0 | +----------------------------------------+-------+ 13 rows in set (0.003 sec) |
Performance_schema provided a few tables to monitor thread pool activity, along with the status variables.
|
1 2 3 4 5 6 7 8 9 10 |
mysql > show tables like 'tp%'; +------------------------------------+ | Tables_in_performance_schema (tp%) | +------------------------------------+ | tp_connections | | tp_thread_group_state | | tp_thread_group_stats | | tp_thread_state | +------------------------------------+ 4 rows in set (0.001 sec) |
|
1 2 3 4 5 6 7 |
mysql> show status like 'thread_pool_%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Thread_pool_query_threads | 14 | +---------------------------+-------+ 1 row in set (0.001 sec) |
MySQL 26.7 improves the robustness of InnoDB undo tablespace truncation. Previously, InnoDB used a separate undo_{space_number}_trunc.log file to keep track of an undo tablespace truncation operation. This external file was used to determine whether a truncation operation was in progress, particularly during recovery.
Now this approach has changed: instead of maintaining a separate truncate log file, the truncation state is captured directly in the undo tablespace header.
This improves both undo truncation and recovery as it does not rely on a separate dedicated file.
There were some internal changes, or rather improvements, to the structure and efficiency of the core InnoDB recovery, metadata, redo-log, tablespace, and transaction-visibility code paths.
This doesn’t bring any changes to the usage point of view. The goal is to make these components easier to maintain, test, and extend without changing user-visible SQL semantics.
The group_replication_communication_stack now defaults to “MySQL” from “XCOM”. This change is more aligned with the MySQL Server authentication and connection security.
This also means no separate communication port needs to be specified for group replication variables (group_replication_local_address and group_replication_group_seeds). The native MySQL port (3306)/ MEMBER_PORT or whatever is defined for MySQL nodes can be used instead.
In short, the default MySQL communication stack provides the benefits below.
Note – If migrating from the old environment or switching from “XCOM” to “MySQL” simply switching the communication stack wouldn’t work.
|
1 |
mysql> set global group_replication_communication_stack = 'MySQL'; |
Group replication must be stopped on all members, and then the relevant changes should be applied. Finally, the cluster needs to be bootstrapped.
Basically, this activity requires downtime to successfully switch the communication stack.
Also, the XCom communication stack is deprecated and could be removed in future releases, so better to switch to the MySQL stack. Further complete release notes can be checked here – https://dev.mysql.com/doc/relnotes/mysql/26.7/en/news-26-7-0.html
The transition to MySQL 26.7 introduces a major shift to a calendar-based versioning scheme (Year.Month.Patch), providing clearer alignment with release timelines and future planning across both Innovation releases and long-term support cycles. Upgrading to this new series requires being on MySQL 9.7 LTS as the primary baseline before moving forward into the 26.x series.
Alongside versioning improvements, MySQL 26.7 delivers significant architecture and usability enhancements. Key features include the Change Stream Applier (CSA) for optimised parallel transaction execution and replication performance, as well as the native availability of the Thread Pool Plugin in Community editions to manage high-concurrency connections effectively without relying on Enterprise Edition extras.