Recently AWS announced a long waited support of MySQL 8 for their RDS Aurora. Of course, you could use MySQL 8 engine on RDS way before, but Aurora has lots of good features like replication. Version 5.7 will be supported until Oct 2023 so you should think about migration in advance.

This is my personal list of features that we will be using in our project. I will structure features by their functionality. Here it is:

Performance

  1. Instant DDL 
  2. MySQL 8 introduced ALGORITHM=INSTANT with the ALTER TABLE statement. This gives you a huge performance impact on some types of operations. According to official docs ADD COLUMN operation on a table with 150M records would be executed within 0.5–1.5s (!). Compared to MySQL 5.7 — it would take nearly 40m. 
  3. (!) But be aware that this feature currently works only with enabled Amazon Aurora MySQL lab mode
  4. Invisible indexes. This can be very useful to test index performance impact without breaking anything on your production database. Adding and deleting indexes on big data sets is expensive and time-consuming. Using an invisible index can help you with testing and after tuning — you can make an index visible to the optimizer. The top feature for big DBs.

Querying

  1. Window functions. This super handy feature for analytics was introduced in MySQL 8. It’s completely another way of querying your data. If you don’t know what it is and you doing lots of analytics reports — you definitely have to look at its documentation
  2. CTEs using the WITH clause is another handy feature for querying. A common table expression (CTE) is a named temporary result that can be used multiple times within the scope of a statement
  3. JSON functions. JSON data type was introduced in MySQL 5.7, but MySQL 8 brought lots of enhancements to JSON. It includes performance upgrades, new functions, etc.

Upgrade experience

Few words about our experience of migration from the 5.7 to 8 version. We were using Aurora compatible with MySQL 5.7 for a while. There are a few ways of migrating but the only one applicable is restoring from a snapshot, due to downtime and data consistency.

The first problem we faced — we could not restore our MySQL 5.7 snapshot to the latest Aurora version. AWS technical support contacted us and requested a DB snapshot to test it out. We couldn’t wait for a long time so find a workaround. We tried restoring to the latest -1 version and it worked. Of course, it will be longer as you will have to do 2 steps to get the latest Aurora version. BTW, we didn’t hear from AWS for more than 2 weeks :)

In general, we had a successful migration with a 2-hour downtime which is fine and fits our SLA. I would recommend you not to delay the update as MySQL 5.7 won’t be supported after Oct 2023.

MySQL 8 has lots of performance upgrades, and useful features, and is highly compatible with the previous version. And now you can use it on Aurora RDS which is even better.

Fight with your technical debt every day or you will lose!