In this blog, we will look at the differences between LTS (Long Term Stable) versions of Percona Server for MySQL. Released in April 2019, MySQL 8.0 represented a major change from the previous version, 5.7, introducing significant changes to the data dictionary and enabling many features and enhancements. It also provided no direct downgrade path, which slowed its adoption. However, 5.7 was designated end-of-life in October 2023, and adoption rates of 8.0 have steadily risen.
Adoption rates 2023 through 2025
In April 2024, MySQL announced the release of 8.4 and designated it the new long-term stable major version. Similar to the release of 8.0, there is no in-place downgrade from 8.4 to 8.0.
This blog will examine some of the component differences in versions, not an in depth look at new features, behaviors, etc. For these purposes, we will compare Percona Server for MySQL 8.4.2 to Percona Server for MySQL 8.0.40. Percona Server for MySQL includes all the same components as upstream MySQL along with the additions provided with the Percona Server version. We’ll start with a look at the server variables.
Variables
Every major version introduces new variables. In the release of 8.4.2, we find the following new variables introduced:
Variable default
- explain_json_format_version 1
- performance_schema_max_meter_classes 30
- performance_schema_max_metric_classes 600
- restrict_fk_on_non_standard_key ON
- set_operations_buffer_size 262144
- tls_certificates_enforced_validation OFF
It is generally a good practice to leave variables at default values with few exceptions. Changing default values should be done only when a provable improvement can be achieved. These new variables are no exception. The explain_json_format_version controls the behavior of EXPLAIN FORMAT=JSON statements. The default is the same output as that found in previous formats. This variable can be changed at the session level and dynamically set. The performance_schema_max_meter_classes and performance_schema_max_metric_classes control the maximum number of meter and metric instruments that can be created. restrict_fk_on_non_standard_key prevents the use of non-unique or partial keys as foreign keys. This represents best practice and should be left as default. The set_operations_buffer_size determines the buffer size for INTERSECT and EXCEPT operations. This, too, is a session-level variable. Lastly, tls_certificates_enforced_validation “controls whether certificate validation is enforced at startup”. Please refer to the documentation for full information on these and other server variables.
Conversely, major releases often remove variables. It is important to remove these from the configuration file (/etc/my.cnf typically) as their presence will prevent server startup. Candidates for removal are labeled deprecated in prior versions. Deprecated variables will not prevent startup. Variables available in 8.0.40 that were removed in 8.4.2 are:
- avoid_temporal_upgrade
- binlog_transaction_dependency_tracking
- default_authentication_plugin
- expire_logs_days
- have_openssl
- have_ssl
- innodb_parallel_dblwr_encrypt
- innodb_parallel_doublewrite_path
- log_bin_use_v1_row_events
- master_info_repository
- new
- old
- relay_log_info_file
- relay_log_info_repository
- show_old_temporals
- slave_rows_search_algorithms
- transaction_write_set_extraction
Variables newly designated as deprecated and subject to removal in a future release are:
- performance_schema_show_processlist
- restrict_fk_on_non_standard_key
Lastly, variable default values can occasionally change. As with other variables, these defaults should be used without distinct need. The following default values changed.
Variable | 8.0.40 Default | 8.4.2 Default |
enforce_gtid_consistency | OFF | ON |
group_replication_consistency | EVENTUAL | BEFORE_ON_PRIMARY_FAILOVER |
gtid_mode | OFF | ON |
innodb_adaptive_hash_index | ON | OFF |
innodb_buffer_pool_in_core_file | ON | OFF |
innodb_change_buffering | all | none |
innodb_doublewrite_pages | innodb_write_io_threads value | 128 |
innodb_flush_method | fsync | O_DIRECT |
innodb_io_capacity | 200 | 10000 |
innodb_io_capacity_max | 2000 | 20000 |
innodb_log_buffer_size | 16777216 (16M) | 67108864 (64M) |
innodb_numa_interleave | OFF | ON |
innodb_parallel_read_threads | 4 | (available logical processors / 8), min of 4 |
innodb_read_io_threads | 4 | (available logical processors / 8), min of 4 |
innodb_use_fdatasync | OFF | ON |
optimizer_switch | Additional switch operator: hash_set_operations=on | |
temptable_max_mmap | 1073741824 | 0 |
temptable_max_ram | 1073741824 | 4294967296 |
Keywords
Similar to new versions can introduce new keywords and reserved keywords*. This is the case with 8.4.
New keywords in 8.4
- AUTO
- BERNOULLI
- GTIDS
- LOG
- MANUAL (R)
- PARALLEL (R)
- PARSE_TREE
- QUALIFY (R)
- S3
- TABLESAMPLE (R)
*Note that (R) denotes a reserved keyword.
It is rare for keywords to be removed, but in the case of 8.4, it is so. Mostly, these are related to the antiquated replication terms master and slave. Those removed keywords dealing with replication have been replaced with the unoffensive terms source and replica. For example, MASTER_LOG_FILE is replaced with SOURCE_LOG_FILE, and so on.
Keywords in 8.0 that are removed from 8.4
- ANALYSE
- DES_KEY_FILE
- GET_MASTER_PUBLIC_KEY
- MASTER_AUTO_POSITION
- MASTER_BIND (R)
- MASTER_COMPRESSION_ALGORITHMS)
- MASTER_CONNECT_RETRY
- MASTER_DELAY
- MASTER_HEARTBEAT_PERIOD
- MASTER_HOST
- MASTER_LOG_FILE
- MASTER_LOG_POS
- MASTER_PASSWORD
- MASTER_PORT
- MASTER_PUBLIC_KEY_PATH
- MASTER_RETRY_COUNT
- MASTER_SERVER_ID
- MASTER_SSL
- MASTER_SSL_CA
- MASTER_SSL_CAPATH
- MASTER_SSL_CERT
- MASTER_SSL_CIPHER
- MASTER_SSL_CRL
- MASTER_SSL_CRLPATH
- MASTER_SSL_KEY
- MASTER_SSL_VERIFY_SERVER_CERT (R)
- MASTER_TLS_CIPHERSUITES
- MASTER_TLS_VERSION
- MASTER_USER
- MASTER_ZSTD_COMPRESSION_LEVEL
- REDOFILE
- REMOTE
- SQL_CACHE
A few other functional differences exist between versions. For example, the information_schema TABLESPACES table has been removed in 8.4.2. Performance_schema, on the other hand,d has had two new tables added:
- setup_meters
- setup_metrics
These are some of the functional differences between the 8.0 and 8.4 components. Several feature enhancements and new capabilities are beyond the scope of this blog, so please refer to the official documentation for further details.
You may find the following references helpful:
From someone who is looking to upgrade to 8.4 soon, this is very useful! Thank you very much.