2
3

Aurora MySQL 2から3へのバージョンアップで挙動が変わるSQL(2)

Last updated at Posted at 2024-01-06

こんにちは。

本投稿では、Aurora MySQL 2 の EOS 対策として Aurora MySQL 3 へのバージョンアップ(MySQL 5.7からMySQL 8へのバージョンアップ)を検証した際に、Aurora MySQL 2で実行できていたSQLが3で実行できなくなるという情報をいただいたので、実際にそのSQLをSQLテストツール(Insight SQL Testing)を使って確認してみた例を紹介します。

はじめに

Auoroa MySQL 2から3 (MySQL 5.7から8) へのバージョンアップを考えた際、以下の変更点などのMySQLのドキュメントを参照することの多いのではないでしょうか?

ここに書いてある変更がどんなものか、自分たちのサービスやアプリケーションで使用していないか、それらを探すのは骨の折れる作業だと思います。また、ここに書かれている内容以外にも何か影響にあるものがあるとしたら、考えるのも嫌になりますね!

今回ご紹介するSQLは、まさにそういった「変更点」としては含まれていないSQLの挙動の変更になります。

対象のSQL

対象のSQLは以下のようなSQLです。

select 
  *
from
  emp
where
  hiredate >= '1981-05'

Web検索で調べてみたところ、以下のように問題に直面している例もありました。なかなかこういった非互換を検出するのはとても難しいと思います。この挙動変更はバグフィクスという扱いにされていたため、バージョンアップに伴い発生する非互換とは認知されていないようです。

それではさっそく Insight SQL Testing で確認してみましょう。

Aurora MySQL 2での実行

実際にAurora MySQL 2では以下のに実行されるので、正しく実行されていると思ってしまうケースが多いでしょう。

image.png

ただし、実際は警告が出ていたようです。

image.png

とはいえ、なかなかこのような警告にも気づきづらいでしょうし、Aurora MySQL 3になっても同様に動作すると期待してしまいますよね?

Insight SQL Testingを使った検出

Insight SQL Testingを使うと、実際にAurora MySQL 2とAurora MySQL 3に対してSQLを実行し、以下のように挙動の違いが検出されます。現在使用されているSQLをテストケースとし、そのSQLでテスト実行を行った結果です。

image.png

参考

今回のMySQL 8におけるSQLの非互換問題については、以下のサイトなどを参考にしました。

おわりに

Insight SQL TestingはこのようにSQLの挙動の違いを検出することのできるツールです。
詳細について確認されたいときは、以下の記事等もご参照ください。

おまけ

投稿のタイトルを「~(2)」としているのは他のSQLを既に別記事で紹介したからです。

そのほか、予約語もたくさん追加されてますのでご注意ください。

更新情報

  • 2024/4/1: Insight Database Testingの製品名がInsight SQL Testingへ変更になったのでそれにあわせて更新しました
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3