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

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

InnoDB Cluster Added or Changed Functionality

  • 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 reachable.

    • 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.

InnoDB Cluster Bugs Fixed

  • 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 #28064621)

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

  • It was possible to use AdminAPI operations on server instances running an incompatible version of MySQL. (Bug #27765769)

  • 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 #27758041)

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

  • 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)

  • 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 #27344040)

  • 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 #25966235)

  • 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 #27986413)

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 for additional details.

  • X DevAPI: 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 deprecated.

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

    • Collection.find().limit(x).skip(y) has been deprecated.

    • Collection.find().limit(x).offset(y) has been implemented.

    • BaseResult.getAffectedItemsCount() has been implemented.

    • 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.nextResult().

    • SqlResult.nextDataSet() has been deprecated.

    • SqlResult.nextResult() has been implemented.

  • 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 object.help() 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.

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 upgrade checker utility provided by MySQL Shell (the util.checkForServerUpgrade() operation) has been enhanced with a summary count of the errors, warnings, and information level issues found by the tool, and with links to documentation with further information where this is available. (Bug #28171814)

  • 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 #28037407)

  • 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)

  • 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 #27841719)

  • 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)

  • 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 \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)

  • 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)