Parser overflows in stored routines, the end of mysql_native_password, and privilege changes, with a checklist to test before the upgrade.

An RDS upgrade from MySQL 8.0 to 8.4 looks like a button click. Three blockers say otherwise.

1. Stored routines can break the upgrade. Very long routine definitions overflow the 8.4 parser. Find them before RDS does: list routines by definition length from information_schema.ROUTINES — length isn't proof, but it shortlists candidates fast.

2. mysql_native_password is on its way out. 8.4 disables it by default in favour of caching_sha2_password, which needs TLS or RSA key exchange on first connect. Old JDBC, PHP and Node drivers fail here with confusing errors. Migrate users client by client, and test each client against a scratch user first.

3. Privilege checks got stricter. Operations that silently worked can start failing. Diff grants before and after.

The lesson: the upgrade is the easy part; the clients are the risk. Dry-run on a restored snapshot, fix what surfaces, and keep a written checklist — the next upgrade will thank you.