Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

テーマ 5/21

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

\こんばんは/ yoku0825@とある企業のDBA オラクれない ‐ ポスグれない ‐ マイエスキューエる ‐ 生息域 Twitter: @yoku0825 ‐ Blog: 日々の覚書 ‐ 日本MySQLユーザ会 ‐ MySQL Casual ‐ 7/21

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

メンテナンスリリース() 新機能は使いたい…けどメンテナンスリリース(?)を適用すると機能が消えるか も いわゆる「非互換なSQL」が存在する ‐ 5.0から5.7の間ではなかなかなかったような変更がフツーに入ってくる… ‐ なるほど今流行りのあじゃいるってやつですねわかります() そしたらこっちもこっちで負けないようなテストにしないと… ‐ 16/21

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Any Questions and/or Suggestions? 21/21