MySQL Shell 8.0 Release Notes

12 Changes in MySQL Shell 8.0.3 (2017-09-29, Development Milestone)

MySQL Shell now synchronizes the first digit of its version number with the (highest) MySQL server version it supports. This change makes it easy and intuitive to decide which client version to use for which server version. MySQL Shell now uses the same version number as MySQL Server.

MySQL Shell 8.0.3 is the first release to use the new numbering. It is the successor to MySQL Shell 8.0.0.

InnoDB Cluster Added or Changed Functionality

  • With the addition of WL#10611 and WL#10960 , it was not possible to add or rejoin instances that belonged to a cluster (or a replication group) because super_read_only=ON was being set by Group Replication when stopping. To ensure that AdminAPI supports instances running MySQL 8.0.2 and later, the following functions have been modified:

    • dba.configureLocalInstance()

    • dba.createCluster()

    • dba.rebootClusterFromCompleteOutage()

    • dba.dropMetadataSchema()

    Now, if any of these functions is issued against an instance which has super_read_only=ON, in interactive mode you are given the choice to set super_read_only=OFF. To force the function to set super_read_only=OFF in a script, pass the clearReadOnly option set to true. For example dba.configureLocalInstance({clearReadOnly: true}). For more information see Super Read-only and Instances. (Bug #26422638)

InnoDB Cluster Bugs Fixed

  • When using the clusterAdmin option, the created account did not have all of the correct privileges. (Bug #26523629)

  • When using the multiMaster option with dba.createCluster(), the warning displayed in interactive mode was not being logged. (Bug #26385634)

  • When making cluster topology or membership changes, AdminAPI was not taking into consideration the value of group_replication_group_name, which could lead to incorrect, non-deterministic results in scenarios such as a split brain. Now, the following commands validate the InnoDB cluster Metadata and the corresponding instance's group_replication_group_name value:

    • dba.getCluster()

    • Cluster.rejoinInstance()

    • Cluster.forceQuorumUsingPartitionOf()

    If the values of group_replication_group_name do not match, the commands abort with an error.

    dba.rebootClusterFromCompleteOutage() was also updated to ensure that the group_replication_group_name variable has not been changed before rejoining the instance. (Bug #26159339)

  • AdminAPI now always uses the active user value for the current mysqlsh session, whether the value was explicitly specified by the user or is the result of an implicit default used by mysqlsh. (Bug #26132527)

  • The checks performed by the AdminAPI upon issuing dba.rebootClusterFromCompleteOutage() were more strict than those required by Group Replication. Now, the AdminAPI considers tables with a Primary Key Equivalent (such as a Non Null Unique Key) as compatible, matching the current requirement for Group Replication. (Bug #25974689)

  • The randomly generated passwords used by internal users were not compatible with instances running the Password Validation plugin. (Bug #25714751)

  • It is no longer possible to use the adoptFromGr option with the multiMaster option. When adopting an existing group to an InnoDB cluster, the group is adopted based on whether it is running as multi-primary or single-primary. Therefore there is no use for the multiMaster option when adapting a group. (Bug #25664700)

  • Issuing configureLocalInstance() when using a URI that contained a user without the correct privileges resulted in an incorrect new user being created. Now, if the user in configureLocalInstance() URI does not have enough privileges to grant all the necessary privileges for the new user chosen during the interactive wizard configuration the user is not created. (Bug #25614855)

  • Issuing Cluster.rescan() resulted in non-determinstic behavior which could produce incorrect JSON output, showing an instance that was already part of the cluster as belonging to the newlyDiscoveredInstances[] list and to the unavailableInstances[] list. This also resulted in MySQL Shell prompting to add or remove the instance from the cluster. (Bug #25534693)

  • AdminAPI functions now accept the standard connection parameters as used by shell.connect. New validations have been added for when require_secure_transport is ON, now it is not possible to create a cluster with memberSslMode:DISABLED or to add an instance with require_secure_transport=ON to a cluster where memberSslMode:DISABLED. (Bug #25532298)

  • The parsing of account names, for example when passing the clusterAdmin option to dba.configureLocalInstance() has been improved. (Bug #25528695)

  • The file permissions of option files created by AdminAPI did not match those of options files created by MySQL install. (Bug #25526248)

  • Issuing configureLocalInstance() twice could fail. (Bug #25519190)

  • When passing the rejoinInstances[] option to dba.rebootClusterFromCompleteOutage(), if no rejoinInstances[] option was specified then members were being incorrectly handled during the rebuild. Now, instances that are eligible to be added to the rejoinInstances[] list but that are specified in the removeInstances[] list are skipped by the interactive wizard that tries to automatically build a rejoinInstances[] list if one was not provided. This fix also ensures that both interactive and noninteractive use of MySQL Shell correctly verify the rejoinInstances[] list does not contain a unreachable instance. (Bug #25516390)

  • The error messages issued when the SSL mode used by the cluster and the one specified when issuing addInstance() command do not match have been improved. (Bug #25495056)

  • When creating a sandbox instance using the dba.deploySandboxInstance() function in MySQL Shell, pressing Ctrl+C at the prompt for a MySQL root password for the instance did not cancel the deployment. (Bug #25316811)

  • Issuing removeInstance() on the last member of a cluster, and particularly the seed member, was resulting in a cluster that could not be dissolved. Now, issuing removeInstance() on the last member of a cluster results in an error, and you must use dissolve() on that instance to ensure the cluster is correctly dissolved. (Bug #25226130)

  • The output of cluster.status() now includes the ssl parameter, which shows whether secure connections are required by the cluster or disabled. (Bug #25226117)

  • Attempting to create a multi-primary cluster in interactive mode failed unless you passed in the {force: true} option. Now when you confirm that you understand the impact of using multi-primary mode the command correctly creates a multi-primary cluster. (Bug #25034951)

  • The removeInstance() was not working on stopped instances and it was not possible to remove an unavailable instance from the cluster. The fix adds a new option force to the removeInstance() command to enable you to remove instances from the metadata that are permanently not available, avoiding obsolete data from being kept in the metadata of the cluster. In addition the error message provided when not using the force option has been improved and the online help for the removeInstance() was also updated accordingly. (Bug #24916064)

  • The error messages generated by issuing dba.deployLocalInstance() against an unsuitable or incompatible instance have been improved. (Bug #24598272)

  • The dba.createCluster(), dba.getCluster(), and dba.rebootClusterFromCompleteOutage() functions have been updated to validate the cluster name, using the following rules:

    • Name must start with a letter or the _ character

    • Name can only contain alphanumeric characters and the _ character

    • Cannot be longer than 40 characters

    • Cannot be empty

    The Cluster.addInstance() function has been updated to validate the label used on an instance in the cluster, using the following rules:

    • Label can only contain alphanumerics or the _ character

    • Cannot be longer than 256 characters

    • Cannot be empty

    (Bug #24565242)

Functionality Added or Changed

  • X DevAPI: The types of session available have been simplified. XSession and NodeSession have been consolidated into Session. This has caused the following changes:

    • The following command options have been deprecated: --node, --sqln, --classic

    • The following command options have been introduced to replace the deprecated ones: -ma, --mysqlx (-mx), --mysql (-mc), --sqlx

    • The \connect MySQL Shell command no longer supports the arguments -c, and -n. Now the \connect command supports the argument --mysqlx(-mx) for creating X Protocol connections, and --mysql(-mc) for creating MySQL protocol connections.

  • MySQL Shell now handles user interrupts, such as SIGINT, correctly. For example on Linux pressing Control-C when MySQL Shell is not executing anything exits the application. In SQL mode, interruption sends a KILL QUERY statement to the active MySQL Shell session from a new temporary session, resulting in the server interrupting the query and returning an error (or in an early return with no error in some cases, like the sleep() function). In JavaScript or Python scripting modes, how interruption behaves depends on the specific function being executed. If what is being executed is language code (such as a while loop and other normal script code), an exception is generated in the active language, which causes the code to stop executing. The exception may be caught by the script, but if not, the execution control returns to MySQL Shell. (Bug #24757361)

  • MySQL Shell now includes a history function that stores the code which you issue. The history can be saved, searched, and filtered. A new mechanism to customize the MySQL Shell prompt has been added. Information such as the current mode (SQL, JavaScript, or Python), session information (host, uri, port and so on), the current active schema and others can be included in the prompt through variables. The customization information is self-contained in JSON theme files, which can be shared between users. MySQL Shell now supports unicode if the terminal used to run MySQL Shell supports it. Similarly if the terminal supports color, MySQL Shell can be configured to use colors in the theme.

  • The connection options passed to MySQL Shell, such as sslMode and so on, have been changed to use dashes and no longer be case sensitive. The options are now:

    • sslMode is now ssl-mode

    • sslCa is now ssl-ca

    • sslCaPath is now ssl-capath

    • sslCert is now ssl-cert

    • sslKey is now ssl-key

    • sslCrl is now ssl-crl

    • sslCrlPath is now ssl-crlpath

    • sslCiphers is now ssl-ciphers

    • sslTlsVersion is now tls-version

    • authMethod is now auth-method

  • The interpretation of the document_path field in operations such as modify() has been changed. Now, when the document_path is not set, operations apply to the whole document. All operations always preserve a document's _id field.

Bugs Fixed

  • X DevAPI: Unsigned data could be incorrectly read from the database. (Bug #24912358)

  • In MySQL Shell, the Schema.getCollectionAsTable() function and the select() method could not be used in the same Python statement. (Bug #26552804)

  • MySQL Shell returned some elements of DATE and DATETIME values incorrectly, including month values and fractional seconds. (Bug #26428636)

  • The month was incorrectly incremented on insertion of a timestamp in a table using MySQL Shell. (Bug #26423177)

  • For columns with the ZEROFILL attribute, NULL was also returned padded with zeroes. (Bug #26406214)

  • The output of the MySQL Shell \status command was enhanced with additional information. (Bug #26403909)

  • The MySQL Shell help for the \connect command indicated that a connection name could be used instead of a URI string, which was incorrect. (Bug #26392676)

  • The MySQL Shell command \use did not attempt to reconnect if the connection to the global session was lost. (Bug #25974014, Bug #86118)

  • The short form -? can now be used as an alias for the --help command-line option in MySQL Shell. (Bug #25813228)

  • The MySQL Shell command history displayed the commands that were used to automatically import the mysql and mysqlx API modules when MySQL Shell started. (Bug #25739185)

  • The MySQL Shell command history displayed the contents of scripts that were run using the \source MySQL Shell command. (Bug #25676495)

  • The mysqlx.getNodeSession() function in MySQL Shell now returns an error if an unrecognized connection option is provided. (Bug #25552033)

  • The --ssl option has been deprecated, use the --ssl-mode option. Now, if you use the --ssl option a deprecation warning is generated and the --ssl-mode option is set to either DISABLED or REQUIRED based on the value used with the --ssl option. (Bug #25403945)

  • MySQL Shell did not exit gracefully when the user did not have a valid and accessible home directory. (Bug #25298480)

  • MySQL Shell created a logger but did not deallocate it on exiting the shell. (Bug #25238576)

  • MySQL Shell could hang when Ctrl+C was used to exit the shell. (Bug #25180850, Bug #84022)

  • The parsing of Unix sockets provided as part of a URI has been improved. (Bug #24905066)

  • MySQL Shell now accepts Unicode characters as input. (Bug #23151666, Bug #81176)