Dear MySQL users,

MySQL Shell 8.0.12 is a maintenance release of MySQL Shell 8.0 Series
(a component of the MySQL Server). The MySQL Shell is provided under
Oracle's dual-license.

MySQL Shell 8.0 is highly recommended for use with MySQL Server 8.0 and 5.7.
Please upgrade to MySQL Shell 8.0.12.

MySQL Shell is an interactive JavaScript, Python and SQL console
interface, supporting development and administration for the MySQL
Server. It provides APIs implemented in JavaScript and Python that
enable you to work with MySQL InnoDB cluster and use MySQL as a document

The AdminAPI enables you to work with MySQL InnoDB cluster, providing
an integrated solution for high availability and scalability using
InnoDB based MySQL databases, without requiring advanced MySQL
expertise. For more information about how to configure and work with
MySQL InnoDB cluster see

The X DevAPI enables you to create "schema-less" JSON document
collections and perform Create, Update, Read, Delete (CRUD) operations
on those collections from your favorite scripting language.
For more information about how to use MySQL Shell and the MySQL Document
Store support see
For more information about the X DevAPI see

If you want to write applications that use the the CRUD based X DevAPI
you can also use the latest MySQL Connectors for your language of
choice. For more information about Connectors see

For more information on the APIs provided with MySQL Shell

Using MySQL Shell's SQL mode you can communicate with servers using the
legacy MySQL protocol. Additionally, MySQL Shell provides partial
compatibility with the mysql client by supporting many of the same
command line options.

For full documentation on MySQL Server, MySQL Shell and related topics,

For more information about how to download MySQL Shell 8.0.12, see
the "Generally Available (GA) Releases" tab at

We welcome and appreciate your feedback and bug reports, see


Changes in MySQL Shell 8.0.12 (2018-07-27, General Availability)

Functionality Added or Changed

     * Important Change: An RPM package for installing ARM
       64-bit (aarch64) binaries of MySQL Shell on Oracle Linux
       7 is now available in the MySQL Yum Repository and for
       direct download.
       Known Limitation for this ARM release: You must enable
       the Oracle Linux 7 Software Collections Repository
       (ol7_software_collections) to install this package, and
       must also adjust the libstdc++7 path. See Yum's Platform
       Specific Notes
       n-yum-repo.html#yum-install-platform-specifics) for
       additional details.

     * MySQL Shell now enables you to store user credentials in
       an operating system specific secret store. You can then
       enter a MySQL user's password during connection and store
       it for future connections. Currently the following secret
       stores are supported:

          + MySQL login-path

          + MacOS keychain

          + Windows API
       (Bug #23304789, Bug #81484)

     * The way you access the online Shell help has been
       standardized. Use the \help pattern command to search the
       help. The scope of the command has been increased to
       support retrieving help for the following categories:

          + Class and function help for the Admin API, X DevAPI
            and Shell API. Previously, to retrieve help for API
            objects, you had to create an instance of the object
            and use the method.

          + SQL syntax help, provided that a global session
            object exists.
       Wildcards can now be used to search for help. A number of
       additional bugs relating to incomplete help information
       have also been fixed. (Bug #23255291, Bug #81277, Bug
       #24963435, Bug #25732663, Bug #85481, Bug #25739522, Bug
       #85511, Bug #25739664, Bug #85514, Bug #26393155, Bug
       #86950, Bug #24943074, Bug #26429399, Bug #87037, Bug
       #27870491, Bug #90455, Bug #27870503, Bug #90456, Bug
       #27875150, Bug #90474, Bug #24948933, Bug #83527)

     * The util.checkForServerUpgrade() operation has an
       additional outputFormat parameter that you can specify
       when running the utility. The utility can now generate
       output in two formats:

          + TEXT format, which is the default. This option
            provides output suitable for humans, as previously
            returned by the utility.

          + JSON format. This option provides output suitable
            for machines, which can be parsed and processed for
            various further use cases.

     * The cluster.removeInstance() command has been improved,
       with the following changes:

          + A new interactive option has been added to enable or
            disable interactive mode for the command. The output
            displayed in interactive mode has been improved,
            displaying more useful information.In interactive
            mode, you are prompted to continue with the removal
            of the instance (or not) in case it is not

          + The operation now ensures that the instance is
            removed from the metadata of all the cluster members
            and itself. This only applies to ONLINE members.

          + A new global option dba.gtidWaitTimeout is available
            to define the timeout to wait for transactions
            (GTIDs) to be applied when required by AdminAPI
            commands. If the timeout value defined by
            dba.gtidWaitTimeout is reached when waiting for the
            cluster transactions to be applied for
            cluster.removeInstance() and force: false (or not
            defined) then an error is issued and the operation
            aborted. When force: true then the operation
            continues and does not generate an error.
       References: See also: Bug #27817894.

     * When using the ipWhitelist to define which servers could
       access the cluster, the internal user accounts were not
       matching the whitelist. Now AdminAPI applies the same
       filtering logic from ipWhitelist for the internal
       administrative accounts.
       References: See also: Bug #26140094, Bug #28165891.

     * In order to be compliant with the X DevAPI specification,
       the following changes have been made:

          + Collection.modify(condition).arrayDelete() and
            Collection.modify(condition).merge() have been

          + Collection.find().limit(x).skip(y) has been renamed
            to Collection.find().limit(x).offset(y).

          + Collection.find().limit(x).skip(y) has been

          + Collection.find().limit(x).offset(y) has been

          + BaseResult.getAffectedItemsCount() has been

          + BaseResult.getWarningCount() has been deprecated.

          + BaseResult.getWarningsCount() has been implemented.

          + Result.getAffectedItemCount() has been deprecated.

          + SqlResult.getAffectedRowCount() has been deprecated.

          + SqlResult.nextDataSet() has been renamed to

          + SqlResult.nextDataSet() has been deprecated.

          + SqlResult.nextResult() has been implemented.

Bugs Fixed

     * The sample prompt theme files for MySQL Shell were
       deployed to an incorrect location on the Windows
       platform, in the root install folder. The files are now
       correctly deployed in the \share\mysqlsh\prompt
       sub-folder. (Bug #28188761)

     * The cluster.forceQuorumUsingPartitionOf() operation sets
       the group_replication_force_members variable on the
       target instance to force a new group membership and
       restore the quorum, but it did not reset the value of the
       variable at the end of the process. Consequently, if
       Group Replication later needed to be restarted on the
       target instance it failed because the
       group_replication_force_members variable was still set.
       Now, the group_replication_force_members variable is
       reset to an empty string at the end of the
       cluster.forceQuorumUsingPartitionOf() operation. (Bug

     * When upgrading from version 1.0.11 to version 8.0.11 of
       MySQL Shell on Linux, the upgrade failed if the original
       package was the community edition and the new package was
       the commercial edition, or vice versa. Upgrading from one
       edition to the other edition is now enabled. (Bug

     * The util.checkForServerUpgrade() operation can now use
       either an X Protocol connection or a classic MySQL
       protocol connection. (Bug #28027707)

     * The checkForServerUpgrade() operation to verify upgrade
       prerequisites included an unnecessary check relating to
       ZEROFILL and display length attributes in columns. The
       check has now been removed. (Bug #27927641, Bug #90634)

     * Some messages displayed by MySQL Shell were showing a
       MySQL server version that does not exist. (Bug #27924694)

     * For sessions using the classic MySQL protocol, if the
       session_track_gtids system variable is set on the server
       to capture and return GTIDs to the client, MySQL Shell
       now displays the GTIDs for successfully committed
       transactions. The returned GTID values are also now
       recorded in tracing information. (Bug #27871148)

     * When the defaultMode MySQL Shell configuration option had
       been set with the --persist option, batch code execution
       from a file was always attempted using the specified
       default language, even if the file extension indicated a
       different supported language. Now when a file is loaded
       for batch processing using the --file or -f option, files
       with the extensions .js, .py, and .sql are processed in
       the appropriate language mode, regardless of the set
       default language. (Bug #27861407)

     * The methods provided in the shell.options configuration
       interface to set and save persistent option values used
       underscores in JavaScript as well as in Python mode. The
       methods have now been changed to
       shell.options.setPersist() and
       shell.options.unsetPersist() in JavaScript to follow the
       appropriate naming convention. (Bug #27861141)

     * When executing a SQL script using MySQL Shell, delimiters
       ( such as the default semi-colon character) present in
       multi-line comments caused execution to fail. Delimiters
       are now ignored inside multi-line comments. (Bug

     * MySQL Shell returned an error when querying timestamp
       values that were zero, because a zero value for the month
       or day in a date was not accepted. Zero timestamp values
       can now be used without producing an error. (Bug
       #27833822, Bug #90355)

     * The shell.getSession() function returns a reference to
       the session global object representing the already
       established connection between MySQL Shell and a MySQL
       server, known as a global session. MySQL Shell now
       gracefully handles the situation where the function is
       called when no global session has yet been established.
       (Bug #27809310)

     * It was possible to use AdminAPI operations on server
       instances running an incompatible version of MySQL. (Bug

     * The setting of the bind_address variable is no longer a
       requirement. (Bug #27765484)

     * When creating a cluster or adding an instance, if the
       localAddress option is not specified, the port used for
       group_replication_local_address is automatically assigned
       with the value: port * 10 + 1. However, if the resulting
       port determined by the previous rule was already in use
       then a random port was generated and used. Now MySQL
       Shell checks that the group_replication_local_address
       port is available, and fails if it is not. (Bug

     * The MySQL Shell application icon on Microsoft Windows was
       not being displayed for the MySQL Shell 8.0 GA release,
       due to an incorrect association introduced for the icon
       during code refactoring. The icon is now displayed
       correctly. (Bug #27746532)

     * The dbPassword option is no longer valid in the options
       dictionary of all AdminAPI commands. (Bug #27745106)

     * The \status (\s) command in MySQL Shell now displays full
       information about the version and build of the connected
       MySQL server. (Bug #27740420)

     * The check for reserved keywords carried out by the
       util.checkForServerUpgrade() operation was updated to
       match the list of reserved keywords for the MySQL 8.0 GA
       release. (Bug #27724201)

     * When handling escape sequences, MySQL Shell now
       identifies and skips over SQL comments and string
       literals within quotation marks. (Bug #27665229)

     * Python's mapping type has been added to MySQL Shell, so
       that dictionary syntax can be used to interact with data
       in Python mode. (Bug #27614110)

     * When a file was redirected to standard input for
       execution in MySQL Shell, on Unix, the first part of the
       file was taken as being the password. The password prompt
       now looks for user input first before resorting to
       standard input. (Bug #27572380)

     * It was possible to use the
       dba.forceQuorumUsingPartition() operation on a cluster
       which had not lost quorum. (Bug #27508698)

     * The help message for
       dba.rebootClusterFromCompleteOutage() operation was
       incorrectly suggesting to use
       dba.forceQuorumUsingPartition(). (Bug #27508627)

     * If Ctrl + C was entered or an unexpected error occurred
       at a password prompt in MySQL Shell, the terminal state
       was not restored correctly afterwards. (Bug #27379834)

     * The dba.rebootClusterFromCompleteOutage() operation was
       creating a new user on the target instances, which could
       lead to the existence of an increasing number of users.
       The fix ensures that these users are not created by the
       dba.rebootClusterFromCompleteOutage() operation. (Bug

     * Now when you issue dba.getCluster() and retrieve a
       cluster without quorum a warning is issued in addition to
       the log message. (Bug #27148943)

     * The memberSslMode option could be used with
       cluster.addInstance() and cluster.rejoinInstance()
       operations but if you specified a different value than
       the one used at cluster creation an error was thrown. Now
       set the SSL mode at the cluster level only, in other
       words when issuing dba.createCluster(). The memberSslMode
       option has been removed from cluster.addInstance() and
       cluster.rejoinInstance(). (Bug #27062122)

     * When you issued dba.configureLocalInsance() on an
       instance, it configured the disabled_storage_engines
       variable with the MyISAM, BLACKHOLE, FEDERATED, CSV, and
       ARCHIVE storage engines to ensure that the storage engine
       was set to InnoDB, as required by Group Replication. The
       change to this option was not being reported correctly by
       AdminAPI, and hence the required restart after changing
       the disabled_storage_engines variable was not clear. This
       change was deemed a recommendation, rather than a
       requirement, hence dba.configureLocalInsance() no longer
       configures disabled_storage_engines. (Bug #26754410)

     * Creating a cluster using an account which was missing the
       global grant option failed with an ambiguous error
       message, even though dba.checkInstanceConfiguration() did
       not return any errors. Now when you create a cluster, the
       account being used to administer the cluster is checked
       to ensure that it has the global grant option. (Bug

     * MySQL Shell is able to automatically reconnect global
       session when running in the interactive mode, but
       AdminAPI methods lacked this feature. This resulted in
       you having to reconnect manually. Now, the AdminAPI
       methods which utilize the global session object have been
       improved in order to detect an interrupted session and
       trigger the reconnection mechanism. The Cluster object
       uses its own internal session instance, which does not
       support automatic reconnection. If connection to the
       cluster is lost, you need to manually recreate the
       Cluster object. (Bug #24702489)

     * In the event of a whole cluster stopping unexpectedly,
       upon reboot the memberSslMode was not preserved. In a
       cluster where SSL had been disabled, upon issuing
       dba.rebootClusterFromCompleteOutage() this could prevent
       instances from rejoining the cluster. (Bug #90793, Bug

On Behalf of the MySQL/Oracle Release Engineering Team,
Hery Ramilison

MySQL General Mailing List
For list archives:
To unsubscribe:

Reply via email to