MySQL Shell 8.0 Release Notes

13 Changes in MySQL Shell 8.0.26 (2021-07-20, General Availability)

Deprecation and Removal Notes

  • The TLSv1 and TLSv1.1 connection protocols are now deprecated, and support for them is subject to removal in a future MySQL Server version. (For background, refer to the IETF memo Deprecating TLSv1.0 and TLSv1.1.) It is recommended that connections be made using the more-secure TLSv1.2 and TLSv1.3 protocols. TLSv1.3 requires that both the MySQL server and the client application be compiled with OpenSSL 1.1.1 or higher.

    MySQL Shell’s --tls-version command option, which is one of the options available to configure an encrypted connection at startup of MySQL Shell, now returns a deprecation warning if you specify TLSv1 or TLSv1.1 explicitly as part of the value for the option. (WL #14560)

AdminAPI Bugs Fixed

  • The last instance that remains in ONLINE status in an InnoDB Cluster cannot be removed using the cluster.removeInstance() operation. Previously, when this was attempted, the operation failed with an unrelated error, but it is now handled correctly. (Bug #32955287)

  • AdminAPI operations no longer change the Group Replication communication protocol version automatically in situations where it is possible to increase the version due to a change in group membership. The automated operations caused delays on changes to the cluster. Instead, where relevant, the operations return a message to inform the user that a version upgrade should be carried out. A new option upgradeCommProtocol has been added to the rescan() operation so that the administrator can upgrade the communication protocol version when they choose to do so. (Bug #32769580)

Bugs Fixed

  • When loading a dump that was already in progress, MySQL Shell's dump loading utility util.loadDump() flagged a table as ready to process before the metadata was read, which could potentially result in an issue in the event that the metadata was not completely downloaded and parsed before processing began on the table. (Bug #32934878)

  • When MySQL Shell's dump loading utility util.loadDump() was used to load a dump that contained a zero value in an AUTO_INCREMENT column, the utility did not set the NO_AUTO_VALUE_ON_ZERO SQL mode, meaning that the next sequence number was generated and used instead. The behavior has now been corrected. (Bug #32926856)

  • MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() now report an error for a table that uses ROW_FORMAT=FIXED when the ocimds option is used, and remove that clause from CREATE TABLE statements when the force_innodb compatibility modification is specified. (Bug #32925914)

  • MySQL Shell now bundles Python 3.9.5 for platforms where Python 3 is not included or is not at the minimum supported version. The previous bundled version was Python 3.7.7. (Bug #32924896)

  • From MySQL Shell 8.0.26, you can use MySQL Shell's instance dump utility util.dumpInstance() to dump user accounts from a MySQL 5.6 instance. The SUPER privilege is required when user accounts are included in the dump. (Bug #32883314)

  • The error messages returned by MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() have been enhanced to provide more context for the error, such as the schema or table involved and the step that was being executed. The utilities also now cache frequently used values such as quoted table names. Other enhancements have been made to optimize the chunking procedure. (Bug #32850177)

  • MySQL AdminAPI now uses the terms “source”, “replica”, and “mta” for target MySQL instances where these terms are used in system variables and other areas, and user messages have been updated to use the new terms. (Bug #32774826)

  • If the primary key of a table was a signed integer, an overflow in the data range during chunking by MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() could cause MySQL Shell to consume excessive memory and disk space. (Bug #32773468)

  • Previously, when MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() were run with the dryRun option set to true, so that the data was not actually dumped, the utilities attempted to acquire the needed table locks. To avoid impacting on the database, the utilities now only check whether the user ID has the appropriate privilege to acquire a lock, and behave according to the result. Any missing privileges are reported. The utilities’ method of fetching user privileges has also been refactored to use the SHOW GRANTS statement, and to support partial revokes. (Bug #32695301)

  • X DevAPI’s ClassicSession and Session objects have a new method getSocketFd to fetch the session’s socket descriptor. The Session object has new methods enableNotices and fetchNotice to fetch asynchronous notifications published by X Protocol for Group Replication events such as view changes. (Bug #32665405)

  • On UNIX systems, the list of plugins could not be retrieved from MySQL Shell’s plugins repository because the manifest path was specified in Windows format. The path has now been changed to POSIX mode. (Bug #32663889)

  • MySQL Shell’s command-line integration did not support deprecated options and treated them as invalid. (Bug #32651899)

  • MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() use an algorithm to divide table data into chunks. If the algorithm carried out chunking using an integer column, large gaps in the sequence of integers caused by deleted rows could result in the ranges and chunks becoming increasingly larger until the benefit of chunking was lost. The algorithm has now been improved to use an increased number of iterations and make additional checks if the results are not as expected. (Bug #32602325)

  • MySQL Shell’s log now records more detailed information when there is an issue with an Oracle Cloud Infrastructure operation, including the target URL, the request and response headers, and the response data. If the target URL is a pre-authenticated request (PAR), the sensitive components are masked in the log file.

    An issue with a change to the logging level of messages not activating message logging at the right level has also been fixed. (Bug #32593125)

  • MySQL Shell retrieved SQL identifiers that used quoting as a series of separate tokens. (Bug #32532347)

  • MySQL Shell's instance dump utility util.dumpInstance(), schema dump utility util.dumpSchemas(), and table dump utility util.dumpTables() use multiple threads to dump data from the MySQL instance, each using its own session. If one of these threads was slow to start and an exception was thrown in the main dumper thread in the meantime, a segmentation fault occurred when the thread tried to access the main dumper thread’s session. The utilities now keep the main dumper thread’s session available even after an exception is thrown, and only delete it when the utility ends. (Bug #32528110)

  • In MySQL Shell’s JavaScript mode, if a variable was defined using the let keyword but was not properly initialized, it was left in a state where it could neither be accessed nor initialized. MySQL Shell now permits variables defined using the let keyword to be redefined with a different value, which can be used to correct the issue. Variables defined using the const keyword cannot be redefined in this way. (Bug #32470621)

  • When an integer value received by MySQL Shell was converted for representation in JavaScript mode, rounding errors occurred for values greater than 2 ^ 31 – 1. The data type used for the conversion has been changed so that values up to the limit accepted by the JavaScript language can be converted correctly. (Bug #32423886)

  • MySQL Shell’s Python mode implements its own array wrapper for lists. Previously, the isinstance function did not identify these as the list object type. The implementation has been changed to inherit from Python’s list so that the isinstance function operates correctly. MySQL Shell stores data in the array wrapper rather than the base class. Due to this fact, and the fact that data is shared between MySQL Shell’s Python and JavaScript modes, it is only safe to use lists to store basic data types and MySQL Shell global objects. (Bug #32220514)

  • MySQL Shell's Python mode now provides full support for programs that use multithreading. Using the new function shell.createContext, output, logging, and user input for a thread can be isolated, and a separate log file can be specified for each thread. (Bug #32101215)

  • It was not possible to install MySQL Shell on Mac OS X because the packages were not signed. (Bug #103855, Bug #32943928)