Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL 8.0に負けないテストの作り方(仮)

MySQL 8.0に負けないテストの作り方(仮)

yoku0825
PRO

June 02, 2020
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. MySQL 8.0に負けないテストの作り方(仮)
    「変わったこと、変わらなかったこと」
    2020/06/02
    yoku0825
    吉祥寺.pm22

    View Slide

  2. 吉祥寺.pmは11
    以来約3年ぶり
    1/21

    View Slide

  3. ブッキング間違って
    3時間後から深夜メ
    ンテ( ゚д゚)
    2/21

    View Slide

  4. I have no
    (´・ω・`)
    3/21

    View Slide

  5. 吉祥寺.pm22【オ
    ンライン】
    4/21

    View Slide

  6. テーマ
    5/21

    View Slide

  7. 「変わったこと、変
    わらなかったこと」
    6/21

    View Slide

  8. \こんばんは/
    yoku0825@とある企業のDBA
    オラクれない

    ポスグれない

    マイエスキューエる

    生息域
    Twitter: @yoku0825

    Blog: 日々の覚書

    日本MySQLユーザ会

    MySQL Casual

    7/21

    View Slide

  9. MySQLの尻に敷かれる毎日
    (c)tomo
    8/21

    View Slide

  10. 以上変わらな
    かったこと
    9/21

    View Slide

  11. MySQL 8.0
    mysql80 160> SELECT CURDATE() /* JST */;
    +------------+
    | CURDATE() |
    +------------+
    | 2018-04-20 |
    +------------+
    1 row in set (0.00 sec)
    mysql80 160> SELECT @@version;
    +-----------+
    | @@version |
    +-----------+
    | 8.0.11 |
    +-----------+
    1 row in set (0.00 sec)
    10/21

    View Slide

  12. MySQL 8.0
    mysql80 671> SELECT CURDATE() /* JST */;
    +------------+
    | CURDATE() |
    +------------+
    | 2020-06-02 |
    +------------+
    1 row in set (0.00 sec)
    mysql80 671> SELECT @@version;
    +-----------+
    | @@version |
    +-----------+
    | 8.0.20 |
    +-----------+
    1 row in set (0.00 sec)
    11/21

    View Slide

  13. MySQL 8.0
    ナッツシェル( What is New in MySQL 8.0 の章)が何故かどんどん増える
    $ curl -L -s https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html | perl -nlE 'if
    ($_ =~ /(8\.0\.\d+)/) { say $1 }' | sort -t "." -k 3 -n | uniq -c
    1 8.0.0
    3 8.0.2
    4 8.0.3
    2 8.0.4
    2 8.0.12
    6 8.0.13
    6 8.0.14
    9 8.0.16
    10 8.0.17
    6 8.0.18
    7 8.0.19
    9 8.0.20
    8 8.0.21
    8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よってWhat is Newの中にはない
    12/21

    View Slide

  14. MySQL 8.0は1つ1つのメンテナンスリリースにメジャーバージョンアップ並
    みの機能追加をぶち込んでくる
    version New Feature
    8.0.12 Instant ADD Column
    8.0.13 式デフォルト, 関数インデックス
    8.0.14 Lateral, InnoDBパラレルスキャン, log_slow_extra
    8.0.16 CHECK制約, partial_revokes, Async C-Library
    8.0.17 Clone, 配列INDEX, JSON_SCHEMA_VALID, Anti-
    semijoin, binlog暗号化
    8.0.18 Hash-join, EXPLAIN ANALYZE
    8.0.19 InnoDB ReplicaSet, 時刻リテラルのオフセット, VALUESス
    テートメント
    8.0.20 Binlog圧縮
    一部抜粋しただけです
    13/21

    View Slide

  15. MySQL 8.0は1つ1つのメンテナンスリリースにメジャーバージョンアップ並
    みの機能削除もぶち込んでくる
    version Deprecated Removed
    8.0.12 GROUP BY .. ASC -
    8.0.13 PAD_CHAR_TO_FULL_LENGTH GROUP BY .. ASC
    8.0.14 ibdata1でのパーティショニング -
    8.0.16 mysql_upgrade, sha256_password 暗黙のテンポラリーテーブルMyISAM
    8.0.17 ZEROFILL, DECIMAL with
    UNSIGNED, &&, || , 非整数型での
    auto_increment,
    CALC_FOUND_ROWS
    -
    8.0.18 MYSQL_PWD, relay_log_info_file -
    8.0.19 YEAR型の桁指定 INT型の桁指定の表示
    8.0.20 UNION with INTO, INSERT INTO ..
    DUPLICATE KEY UPDATEの中での
    VALUES
    -
    一部抜粋しただけです
    14/21

    View Slide

  16. MySQL 8.0
    「メンテナンスリリース」 だと言い張る
    The MySQL 8.0.12 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.13 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.14 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.16 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.17 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.18 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.19 Maintenance Release is Generally Available | MySQL Server Blog

    The MySQL 8.0.20 Maintenance Release is Generally Available | MySQL Server Blog

    8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よって公式ブログに記事は無い()
    15/21

    View Slide

  17. メンテナンスリリース()
    新機能は使いたい…けどメンテナンスリリース(?)を適用すると機能が消えるか

    いわゆる「非互換なSQL」が存在する

    5.0から5.7の間ではなかなかなかったような変更がフツーに入ってくる…

    なるほど今流行りのあじゃいるってやつですねわかります()
    そしたらこっちもこっちで負けないようなテストにしないと…

    16/21

    View Slide

  18. MySQL 8.0の進化に取り残されないようなテスト…の前に
    “What Is New in MySQL 8.0” (俗称ナッツシェル) の “Features {Deprecated|
    Removed} in MySQL 8.0” は有効な情報源
    https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html

    MySQL ShellのUpgrade Checkerは「存在するオブジェクト」に関しては有効
    予約語とカブるカラム名、非推奨になった属性で作られているストアド、etc.

    https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html

    17/21

    View Slide

  19. MySQL 8.0の進化に取り残されないようなテスト
    モックではなく実物を使う
    Test::mysqld

    Dockerコンテナでもいい

    拾えるなら SHOW WARNINGS は全部拾う
    拾えなくても performance_schema.events_errors_summary_global_by_error や
    performance_schema.events_statements_summary_by_digest が使えるかも、諦め
    ないで!
    18/21

    View Slide

  20. デモ
    yoku0825/kichijojipm_22: Demo on kichijoji.pm #22
    19/21

    View Slide

  21. 参考
    ぼくらが8.0に至ったみちのり(踏破)
    20年前のMySQL、今のMySQL
    罠と呼ぶには大したことのない(フィクションの)MySQL 8.0のはなし
    20/21

    View Slide

  22. Any Questions
    and/or
    Suggestions?
    21/21

    View Slide