Skip to content

MySQL 8.0 to MySQL 8.4

MySQL 8.4 upgrades are released to the users. To run the upgrade checker execute the upgrade checker, read the report, fixing warnings and errors. The upgrade is enabled if the upgrade checker report doesn't have any errors (but warnings are allowed). Exceptionally, for this upgrade campaign we automatically modify the my.cnf configuration file of our users' instances, removing any removed variables. You can find the list of changes we enforce below.

Important warnings

In a future MySQL version (not the latest 8.4), MySQL 9.7 LTS, the insecure md5 based mysql_native_password plugin will be completely blocked and connections with users with this plugin will no longer be possible. We advise our users to upgrade to the recommended and now default caching_sha2_password plugin well before that date. An important change with this upgrade campaign is that the default plugin that will be used for new users is going to be caching_sha2_password since default_authentication_plugin is going to be removed from all instances.

To check which plugin you are using for your database users you can run:

select user,plugin from mysql.user

You can update the plugin for a user executing the following (replace admin with the user name you want to change and password by your desired password):

ALTER USER 'admin' IDENTIFIED WITH 'caching_sha2_password' BY 'password';

Reasoning for changing to caching_sha2_password

The mysql_native_password plugin will be removed in a future release, and MySQL developers are actively trying to discourage users from using mysql_native_password (Currently each time a new connection is made a warning is raised in the logs), therefore users are encouraged to upgrade their passwords to the recommended plugin: caching_sha2_password.

mysql_native_password is using MD5 based hashes, which are very well known to be vulnerable to collisions and are easy to crack. caching_sha2_password on the other hand uses SHA-256 authentication, that is more secure.

utfmb3 character set deprecation

We would like to remind our users that the utfmb3 character set has been deprecated and is set to be completely removed in a future MySQL release. Please follow the instructions in this page.

Complete list of my.cnf file changes

To maintain the configuration of our databases in a uniform way and prevent users from using stale defaults we reviewed all the configuration values of our MySQL databases and apply the following configuration cleanup in all my.cnf files:

# 1 General cnf file inspection notes 
    # 1 Rename general-log-file to general_log_file
    # 2 Rename log-bin to log_bin
    # 3 Rename relay-log to relay_log
    # 4 Rename relay-log-index to relay_log_index
    # 5 Rename server-id to server_id
    # 6 Rename ssl-ca, ssl-cert, ssl-key to ssl_ca, ssl_cert, ssl_key
    # 7 Remove performance_schema when default value is ON
    # 8 log-slave-updates replaced by log_replica_updates=ON
    # 9 Remove redundant sync_binlog=1  
    # 10 Remove redundant innodb_flush_log_at_trx_commit = 1
    # 11 Remove redundant innodb_file_per_table=ON
    # 12 Remove redundant log_output=FILE

# 2. 8.4 Upgrade notes     
    # 1 Remove default_authentication_plugin 
    # 2 Remove authentication_policy 
    # 3 Remove binlog_transaction_dependency_tracking
    # 4 Remove binlog_format
    # 5 Add mysql_native_password=ON in all of our instances
    # 6 Semisynchronous replication variables
        # rpl_semi_sync_master_enabled renamed to be rpl_semi_sync_source_enabled
        # rpl_semi_sync_master_timeout renamed to be rpl_semi_sync_source_timeout
        # rpl_semi_sync_master_wait_point renamed to rpl_semi_sync_source_wait_point
        # rpl_semi_sync_slave_enabled renamed to rpl_semi_sync_replica_enabled
    # 7 Removal of ssl-cipher/ssl_cipher 
    # 8 set innodb_redo_log_capacity to at least 256M 
        # If innodb_log_file_size if bigger than 128M remove the variable and replace with innodb_redo_log_capacity with double the value
            # if its equal or smaller than 128M remove innodb_log_file_size

    # 9 Remove slave_preserve_commit_order 
    # 10 Remove slave_parallel_type
    # 11 Remove table_definition_cache (use default of autosize)
    # 12 Remove table_open_cache if less than 4000
    # 13 Remove thread_cache_size to get default of (-1)
    # 14 Make tmp_table_size at least 32MB
    # 15 innodb_write_io_threads will be removed when it is set to the default (4)
    # 16 remove max_allowed_packet when set to 64MB (default is 64MB) 
    # 17 remove max_binlog_size when set to the default of 1073741824
    # 18 remove innodb_checksum_algorithm when defined to change from `innodb` to the new default of `crc32`
    # 19 remove binlog_checksum, set to None when default is crc32
    # 20 remove variable master_info_repository
    # 21 remove variable relay_log_info_repository
    # 22 Set variable log_timestamps to SYSTEM
    # 23 remove variable expire_logs_days
    # 24 remove variable master_info_repository 
    # 25 remove variable character_set_client_handshake
    # 26 remove variable transaction_write_set_extraction
    # 27 remove variable query_cache_size
    # 28 remove variable query_cache_type 
    # 29 remove variable relay_log_info_repository
    # 30 Rename variable slave_parallel_workers to replica_parallel_workers
    # 31 Remove variable replica_parallel_type
    # 32 Remove variable innodb_large_prefix
    # 33 Remove variable tmpdir 
    # 34 Remove variable innodb_file_format
    # 35 Removal of obsolete [client] and [mysql] sections

Once the upgrade to 8.4.2 has been successfully completed you will be able to find a summary of the changes in diff format in your instance's logs directory in EOS.