MySQL Shell Release Notes  /  Changes in MySQL Shell 9.6.0 (2026-01-20, Innovation Release)

Changes in MySQL Shell 9.6.0 (2026-01-20, Innovation Release)

Note

These release notes were created with the assistance of MySQL HeatWave GenAI.

AdminAPI Added or Changed Functionality

  • In previous releases, the periodic updates to the last_check_in field of the mysql_innodb_cluster_metadata.routers table generated very large binary logs. This was caused by MySQL Router storing full configuration details in the attributes field of the mysql_innodb_cluster_metadata.routers table and the entire row being copied to the binary log every time last_check_in was updated.

    As of this release, a new version of the Metadata Schema is added, v2.4.0. In this version, last_check_in is moved to a new table, mysql_innodb_cluster_metadata.router_stats.

    If the schema version is less than 2.4.0, MySQL Router carries on using mysql_innodb_cluster_metadata.routers.last_check_in. If the schema cersion is 2.4.0, or higher, MySQL Router uses mysql_innodb_cluster_metadata.router_stats.last_check_in.

    Important

    You must manually upgrade your Metadata Schema with dba.upgrade_metadata().

    The following commands now grant INSERT and UPDATE ON to MySQL Router accounts:

    • setup_router_account(): grants INSERT and UPDATE ON to new accounts.

    • dba.upgrade_metadata(): grants INSERT and UPDATE ON to existing accounts.

    (Bug #37926324, WL #17027, WL #17028)

Utilities Added or Changed Functionality

  • The Binary Log Dumping and Loading utilities now use the new GTID library introduced in MySQL Server 9.6. (Bug #38667140, WL #16076)

  • When running a dump with the ocimds option enabled, if a table is not using the InnoDB engine, an additional check is executed to verify if it is possible to change the table's engine to InnoDB. If this check fails, an error is reported, which requires a manual fix.

    As a result, the ocimds:true option and the force_innodb compatibility option now require the CREATE TEMPORARY TABLES privilege. (Bug #38650807)

  • The Upgrade Checker utility's queries have been optimized for performance. (Bug #38628445)

  • When loading a dump with the 'handleGrantErrors': 'ignore' option set, if a GRANT statement with multiple roles/privileges fails, the load utility will apply the GRANTs one by one, and inform about the success or failure of each. (Bug #38624926)

  • The dump utilities can now check for the deprecated authentication plugin, authentication_fido. (Bug #38550124)

  • When dumping with the consistent option enabled, if consistency cannot be achieved due to missing privileges and cannot be verified, an additional message is displayed explaining how to create a consistent dump. (Bug #38452568)

  • The following MySQL object filtering options are added to the Upgrade Checker utility:

    • includeSchemas and excludeSchemas

    • includeTables and excludeTables

    • includeRoutines and excludeRoutines

    • includeTriggers and excludeTriggers

    • includeEvents and excludeEvents

    • includeUsers and excludeUsers

    See Upgrade Checker Utility. (WL #17172)

Utilities Bugs Fixed

  • If run against an instance containing a table with a spatial index, the Upgrade Checker utility's output contained an unescaped target_version placeholder. (Bug #38748787)

  • If run in JavaScript mode, with --json=raw, MySQL Shell could close unexpectedly while running a dump or load operation. Errors similar to the following were returned:

            malloc(): unaligned tcache chunk detected

    (Bug #38645196)

  • When resuming a load, if some of the tables were bulk loaded in a previous run, the summary printed at the end was incorrect. The summary listed the total number of bulk load-compatible tables in the dump, not the number of tables which were loaded. (Bug #38644211)

  • Gathering the list of views from an instance without the information_schema.view_table_usage table was slow when the number of views was high. (Bug #38629024)

  • Upgrade Checker utility did not report an unsupported upgrade if the output format was set to JSON. (Bug #38571667)

  • When resuming a load with the 'dropExistingObjects' option set to true, if the user executing the load lacked the ALLOW_NONEXISTENT_DEFINER privilege, the operation could fail. Errors were returned similar to the following:

            While dropping the account 'root'@'localhost': MySQL Error 4006
            (HY000): Operation DROP USER failed for 'root'@'localhost' as it is
            referenced as a definer account in a view.: DROP USER IF EXISTS
            'root'@'localhost'

    Previously, when resuming the load, user accounts were always dropped, unlike other DDL objects whose status is tracked in the progress file, regardless of whether they had been created in the previous run.

    As of this release, creation of user accounts is logged in the progress file. If the load is resumed, accounts that were previously created are now dropped, if 'dropExistingObjects' is enabled, and are not created again. (Bug #38566495)

  • Dumping a MariaDB table that had an explicitly specified collation and contained a string column without a collation clause failed with the following error:

       Failed to replace default collation of table `sakila`.`ptable` from
      'utf8mb4_uca1400_ai_ci' to 'utf8mb4_0900_ai_ci'.

    When the dump utility attempted to replace unsupported collations with their closest counterparts, it expected to find the collation specified twice, once for the column and once for the table. As only one collation clause was present, it reported an error when the second occurrence was missing. (Bug #38560511)

  • If a 5.7 instance contained orphaned objects, the Upgrade Checker utility's syntax check failed with an unknown database error.

    As of this release, the orphaned objects check is moved to the start of the process and any orphaned object discovered is automatically excluded from further checks. (Bug #38555376)

  • When loading a dump into a server with the global system variable sql_generate_invisible_primary_key enabled, if the account lacked privileges to disable this variable at the session level, the operation failed with an Access denied error during session setup.

    As of this release, an error is displayed explaining the issue. (Bug #38520826)

  • When loading a MySQL 5.7 dump, if the target is 8.0, or when the ignoreVersion option is enabled, the loader now automatically removes all SQL modes which are not available in 8.0, or higher. The following modes are now removed:

    • POSTGRESQL

    • ORACLE

    • MSSQL

    • DB2

    • MAXDB

    • NO_KEY_OPTIONS

    • NO_TABLE_OPTIONS

    • NO_FIELD_OPTIONS

    • MYSQL323

    • MYSQL40

    • NO_AUTO_CREATE_USER

    (Bug #38499424)

  • MySQL Shell would not dump a table completely if it had a composite key, with an ENUM column which was not the first in the key definition, and the key values were not listed alphabetically. (Bug #38475999)

  • Under certain circumstances, the Upgrade Checker utility reported obsolete SQL modes as NOTICE instead of ERROR. For example, NO_AUTO_CREATE_USER.

    As of this release, the obsoleteSqlModeFlags check behaves in the following way:

    • NOTICE: if the flag is not persisted in the configuration file, which implies the value will be fixed during the upgrade.

    • WARNING: if no configuration file is provided to the utility, and it is not possible to determine if the issue represents a problem or not.

    • ERROR: if the configuration file is provided and the obsolete flag is defined there.

    (Bug #38424168)

Functionality Added or Changed

Bugs Fixed

  • It was not possible to run commands containing Not Equal operators over X Protocol. Errors similar to the following were returned:

            ValueError: Insufficient number of values for placeholders in query

    Additionally, queries such as the following returned the error regardless of the protocol used:

            session.run_sql('select 1 != ?', [2])

    (Bug #38661681)


PREV   HOME   UP