Upgrade checklist for 9.7¶
Topic type: Task
Thorough preparation reduces upgrade risk more than any cutover tactic. Use the following checklist to guide your upgrade from 8.4 Long-Term Support (LTS) to 9.7. Validate each item in staging before upgrading production.
For underlying MySQL guidance, see Upgrading MySQL .
Pre-upgrade checks¶
Complete the following checks before starting the upgrade.
Review changes in 9.7¶
Read the release notes and the canonical change lists before any other action. The lists identify deprecations and removals that may force application changes.
Take the following actions:
-
Read What Is New in MySQL 9.7 . Identify deprecations and removals that affect your workload.
-
Read the MySQL 9.7 Release Notes for fixes and behavior changes.
-
Read the Percona Server for MySQL 9.7 Release notes .
-
Read Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 9.7 .
Verify your backup¶
A verified backup is the only supported fallback. 9.7 does not support downgrades between releases or below 8.4 LTS.
Take the following actions:
-
Take a hot backup with Percona XtraBackup. Include the
mysqlsystem database, the data dictionary, and system tables. -
Verify the backup by restoring into a clean test environment. Validate startup and table access.
-
Document restore steps and timings. Confirm the runbook with approvers.
Check upgrade compatibility¶
Run an automated incompatibility scan before any other action. Resolve every issue the scan reports.
Take the following actions:
-
Run the MySQL Shell upgrade checker utility (
util.checkForServerUpgrade()) against the source server. Target 9.7 as the destination. -
Resolve all reported issues. Re-run the utility until the report is clean.
-
Repeat the check after schema changes during preparation.
Validate schema and data-dictionary readiness¶
The data-dictionary upgrade fails if specific schema problems exist. Validate the source server using the following commands and queries.
Take the following actions:
-
Run
mysqlcheck -u root -p --all-databases --check-upgrade. Resolve every reported error. -
Confirm no tables use obsolete data types or functions.
-
Confirm no orphan
.frmfiles remain in the data directory. -
Confirm every trigger has a valid definer and creation context. Inspect the trigger attributes through
SHOW TRIGGERSorINFORMATION_SCHEMA.TRIGGERS. Verifycharacter_set_client,collation_connection, andDatabase Collation. Dump and restore any trigger that fails the check. -
Identify partitioned tables on engines without native partitioning. Convert each table to InnoDB, or remove partitioning, before upgrading.
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%'; -
Confirm no foreign key constraint name exceeds 64 characters. Drop and recreate any over-length constraint with a shorter name.
-
Confirm no view defines explicit column names longer than 64 characters.
-
Confirm no
ENUMorSETcolumn element exceeds 255 characters or 1020 bytes. -
Confirm no table in the
mysqlsystem database collides with a 9.7 data dictionary table name. -
Confirm
sql_modecontains no obsolete Structured Query Language (SQL) modes. Obsolete modes block server start on 9.7.
Rebuild flagged tables¶
Some upgrades require table rebuilds. Rebuilds correct collation issues, refresh character-set indexes, or repair corruption that CHECK TABLE reports.
Take the following actions:
-
If
mysqlcheckorCHECK TABLEreports that a table requires an upgrade, rebuild the table. -
For InnoDB tables flagged for upgrade, use the dump and reload method. Dump with
mysqldumpon the source release. Reload withmysqlafter the upgrade. -
For MyISAM, ARCHIVE, or CSV tables, run
REPAIR TABLEormysqlcheck --repairon the source release. -
For collation or character-set changes that affect indexes, rebuild the table with
ALTER TABLE <TABLE_NAME> ENGINE = <STORAGE_ENGINE>. Use the existing engine value. -
See Rebuilding or Repairing Tables or Indexes for details.
Audit reserved keywords in identifiers¶
Additional reserved words can break schemas and queries. Examples include MANUAL, PARALLEL, QUALIFY, and TABLESAMPLE.
Take the following actions:
-
Scan object names and queries for unquoted usage. Quote or rename as needed.
-
See Keywords and Reserved Words in MySQL 9.7 for the complete list.
Migrate authentication and connectivity¶
Impact: The server-side mysql_native_password authentication plugin is removed in 9.7. The default_authentication_plugin system variable, the --mysql-native-password server option, and the --mysql-native-password-proxy-users server option are also removed. Accounts created in 9.7 default to caching_sha2_password. The client-side mysql_native_password plugin remains for backward compatibility with older clients.
Take the following actions:
-
Inventory accounts and applications that still use
mysql_native_password. -
Verify that drivers and clients support
caching_sha2_passwordand Transport Layer Security (TLS) as configured. -
Plan account migration to
caching_sha2_password. -
Migrate every
mysql_native_passwordaccount before you upgrade. 9.7 provides no server-side option to re-enable the removed plugin.
Update replication syntax and operational scripts¶
Impact: MASTER and SLAVE syntax is removed and causes syntax errors. Use SOURCE and REPLICA commands.
Take the following actions:
-
Search for and update scripts that use
START REPLICA,SHOW REPLICA STATUS, andCHANGE REPLICATION SOURCE TO. -
Validate Orchestrator and other high-availability (HA) tooling versions for 9.7 syntax.
-
Update Percona Toolkit calls. Replace
pt-slave-findwithpt-replica-find. Replacept-slave-restartwithpt-replica-restart. Removept-slave-delayusage. -
For replication topologies, plan a rolling upgrade. Apply a single-server method to each server in turn.
Replace removed features and variables¶
Impact: Several legacy statements, status counters, variables, and functions are removed in 9.7.
Take the following actions:
-
Migrate from
expire_logs_daystobinlog_expire_logs_seconds. -
Remove dependencies on built-in memcached variables and APIs.
-
Replace
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()withWAIT_FOR_EXECUTED_GTID_SET(). -
Replace
MASTERandSLAVEstatements and counters withSOURCEandREPLICAequivalents. -
Audit
my.cnffor removed startup options and system variables. Update or delete the entries.
Resolve schema constraint violations¶
Impact: AUTO_INCREMENT is not allowed on FLOAT or DOUBLE columns.
Take the following actions:
- Identify any
FLOATorDOUBLEAUTO_INCREMENTcolumns. Convert the columns to integer types before the upgrade.
Shut down the source server cleanly¶
Impact: An in-place upgrade requires a clean shutdown of the source server with redo logs flushed.
Take the following actions:
-
Set
innodb_fast_shutdown=0and stop the source server through your service manager. -
If the source server crashed, restart on the source release. Perform a clean shutdown before retrying the upgrade.
-
Confirm no leftover redo log files block restart on the source release.
Confirm operating system support¶
Impact: An in-place upgrade requires a 9.7-supported operating system. Mismatched platforms force a side-by-side migration.
Take the following actions:
-
Confirm that the host distribution version is supported for 9.7.
-
If the host needs an operating system upgrade, plan a side-by-side migration with cutover. See Upgrade strategies.
Compare behavior and run tests¶
Behavioral parity between releases reduces post-upgrade incident risk. Compare query plans, smoke-test the application, and run the source and target in parallel.
Take the following actions:
-
Restore production data into a 9.7 test server. Run application smoke tests against the server.
-
Use
pt-upgradeto compare query plans and behavior between 8.4 and 9.7. -
Run load tests at production scale. Capture latency, throughput, and resource use.
-
Run the source and target releases in parallel during the test phase.
Capture performance baselines¶
Pre-upgrade baselines define the comparison set for post-upgrade validation. Record latency, throughput, processor, and input/output (IO) measurements before any binary change.
Take the following actions:
-
Capture latency, throughput, and processor and IO baselines on the source release.
-
Document expected regression sources for follow-up investigation. Examples include optimizer changes, character-set changes, stronger encryption, stronger authentication, and additional memory.
Confirm rollback feasibility¶
A documented rollback path is the supported fallback when an upgrade fails. Define the path and confirm the runbook before the maintenance window opens.
Take the following actions:
-
Define a rollback path. For example, retain the source environment on standby. Validate point-in-time recovery into a source-compatible reader if applicable.
-
Confirm cutover and rollback runbooks with approvers.
Post-upgrade validation¶
Run the following checks immediately after upgrading to 9.7 and before widening traffic.
Verify connectivity and authentication¶
Authentication defaults change in 9.7. Confirm that service accounts and external clients connect with the 9.7 defaults before widening traffic.
Take the following actions:
-
Confirm that accounts created after the upgrade default to
caching_sha2_password. -
Verify application logins for every service account.
-
Verify TLS handshakes for every external client.
Verify replication health (if applicable)¶
Replication threads and topology coordination must restart cleanly after the upgrade. Validate thread state, failover, and Global Transaction Identifier (GTID) consistency across the topology.
Take the following actions:
-
Confirm that
SHOW REPLICA STATUSreports healthy IO and SQL threads. -
Exercise planned failover and change-source procedures.
-
Validate GTID state across the topology.
Restore spatial indexes¶
Re-create and verify any spatial indexes that you dropped during preparation.
Take the following actions:
-
Re-create any spatial indexes that you dropped before the upgrade.
-
Run integrity checks. Use
CHECK TABLE ... EXTENDEDand representative spatial queries to verify index health.
Reload time zone data¶
The upgrade does not refresh time zone tables. Reload the tables if your applications depend on time zone names.
Take the following actions:
-
Reload time zone tables with
mysql_tzinfo_to_sql.mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql -
Verify that
SELECT @@time_zone;and named time zone queries return expected values.
Validate language interfaces and connectors¶
Client libraries and application drivers must match the 9.7 authentication and protocol defaults.
Take the following actions:
-
Rebuild language bindings against 9.7 client libraries. Examples include the Perl
DBD::mysqlmodule and PHP MySQL extensions. -
Update application drivers to releases that support
caching_sha2_password. -
Run application unit and integration tests against the upgraded server.
Compare workload and performance baselines¶
Post-upgrade baseline comparison surfaces regressions caused by 9.7 default changes. Re-run the baseline workload and review the 9.7 defaults.
Take the following actions:
-
Re-run baseline queries and workload tests. Compare latency and throughput against the pre-upgrade baseline.
-
Review changes in 9.7 defaults that can affect performance. Examples include optimizer and costing, redo and undo, and IO settings. Tune as needed.
Review logs and observability¶
Server error logs and observability dashboards expose startup problems and post-upgrade regressions.
Take the following actions:
-
Inspect Performance Schema metrics and Service-Level Objectives (SLO) dashboards for regressions.
-
Review error logs and warnings after startup and during smoke tests.
Validate backup and recovery¶
A fresh backup on the upgraded release confirms recovery on 9.7. The fresh backup replaces the pre-upgrade backup as the operational baseline.
Take the following actions:
-
Optionally, perform a spot restore test to validate recovery on 9.7.
-
Take a fresh full backup with Percona XtraBackup once the server is stable.
Further reading¶
The following Percona Server for MySQL pages cover upgrade-related topics: