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

20年前のMySQL、今のMySQL

yoku0825
December 01, 2019

 20年前のMySQL、今のMySQL

2019/12/01 PHP Conference Japan 2019
https://phpcon.php.gr.jp/2019/

yoku0825

December 01, 2019
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. overview 1995年 MySQL誕生(ただしこの時点では一般公開されていなかった) 1997年 3.21.x 最初の日本語対応 2000年(3月) 日本MySQLユーザ会発足 2000年(6月) MySQL

    3.23.19 からGPLv2での頒布が始まる 第1回目の日本でのPHPカンファレンスらしい 2001年 MySQL 3.23.31製品リリース 2003年 MySQL 4.0製品リリース 2003年 libmysqlclient.so がLGPLからGPLv2に変更 2004年 MySQL 4.1製品リリース 2004年 GPLv2にFOSS例外規定を追加 6/65
  2. overview 2005年 MySQL 5.0製品リリース 2005年 InnobaseがOracleに買収される 2008年 MySQL ABがSun Microsystemsに買収される

    2008年 Mariaストレージエンジンの開発がスタート 2008年 MySQL 5.1製品リリース 2009年 MariaDBのフォーク 2009年 MySQL 6.0の息の根が止まる 2010年 Sun MicrosystemsがOracleに買収される 2010年 MySQL 5.5製品リリース 7/65
  3. overview 2013年 MySQL 5.6製品リリース 2015年 MySQL 5.7製品リリース 2015年 MySQL Fabric製品リリース

    2017年 InnoDB Cluster製品リリース 2018年 MySQL 8.0製品リリース 8/65
  4. 組み込み用mysqld 以前のMySQLがバイナリのサイズを小さく保とうとしていた理由の一つはこれだ と思う 今後、小さなフットプリントで…というのは期待できなくなるかも知れない ‐ “Linux - Generic” で “Minimal

    Install”版というパッケージを提供し始めたので多少はがんば るのかも ‐ rpm全部入りtarボール( *.rpm-bundle.tar )のサイズがこんな 5.7.28のうち200MB弱がembedded ‐ Version size 8.0.18 653.1M 8.0.18-minimal 178.1M 5.7.28 581.3M 5.6.46 297.9M 5.5.62 165.3M 13/65
  5. MyISAM撲滅 2010年 MySQL 5.5 デフォルトストレージエンジンがInnoDBに変更 ‐ 2012年 MySQL 5.6 「MyISAMにできてInnoDBにできないことをなくす」

    ‐ InnoDB FTSのサポート ‐ 2014年 MySQL 5.7 mysql スキーマの一部がInnoDBに ‐ InnoDB GISのサポート ‐ SELECT時に暗黙で作られるテンポラリーテーブルがInnoDBに ‐ 2018年 MySQL 8.0 mysql スキーマが完全にInnoDBに ‐ 暗黙のテンポラリーテーブルにもうMyISAMは選べない ‐ 16/65
  6. プラガブルストレージエンジン 2005年 MySQL 5.0 ARCHIVEストレージエンジン, FEDERATEDストレージエンジン ‐ InnobaseがOracleに買収された年でもある(2005年) おかげさまで(?)ストレージエンジン戦国時代の幕開けに ‐

    2008年 MySQL 5.1 「プラガブルストレージエンジン」APIが公開 ‐ 2018年 MySQL 8.0 データディクショナリーの一新によりストレージエンジンプラグイン冬の時代到来 ‐ 20/65
  7. プラガブルストレージエンジン CREATE TABLE .. Engine = ? だけでデータフォーマットが変えられる素敵機能 トランザクション非対応でスキャンに強いMyISAM ‐

    トランザクション対応でフツーのRDBMSとして使えるInnoDB ‐ 日本語全文検索といえばMroonga ‐ データウェアハウス用のカラムナーInfiniDB ‐ 一時期、雨後のたけのこのように育ったストレージエンジンのエコシステムは 今はもうかつてほどの勢いはない ‐ 21/65
  8. 周辺ツールの内製(?) 開発元が作ってるからって必ずしもメンテナンスされ続けるわけではないけれども MySQL RouterとMySQL Shellは “MySQL InnoDB Cluster” の構成要素でもあり 昨今力を入れているっぽい

    MySQL RouterはMySQL Fabricの時代にできたけど余計なことをしないからまあ まあ筋が良いと思う(が、簡素すぎるというのもある) コードツリー的にはMySQL Serverと同じリポジトリに統合された ‐ MySQL Shellは “mysqlコマンドラインクライアントを置き換えるんだー” とか 言ってた そのうちコードツリーがマージされたり、本体にバンドルされるようになったりしたらその時 期なのかも ‐ 26/65
  9. 日本語対応 1997年 3.21.x 最初の日本語対応 2004年 MySQL 4.1 UTF-8(3バイト)登場 ‐ 2010年

    MySQL 5.5 utf8mb4登場 ‐ 2018年 MySQL 8.0 utf8mb4がデフォルトの文字コードに ‐ UCA 9.0.0に準拠した照合順序 ‐ 29/65
  10. 日本語対応 日本語が格納できる、という意味ではなくて mysql> select hex(s),s from ja_0900_as_cs order by s;

    +--------+------+ | hex(s) | s | +--------+------+ | E4BA9C | 亜 | | E4BC8A | 伊 | | E99BA8 | 雨 | | E6A084 | 栄 | | E5A5A5 | 奥 | +--------+------+ MySQLの日本語コレーション - @tmtms のメモ 30/65
  11. 日本語対応 utf8mb4_ja_0900_as_cs & utf8mb4_ja_0900_as_cs_ks • JIS X 4061の仕様を採用した共通ロケールデータリポジトリ (CLDR /

    Common Locale Data Repository)の内容を実装 • CLDRはDUCETでの言語ごとにカスタマイズされた情報をXML形式で提供 • 基底文字に加えて以下の判別およびソート順の規定を行う – 清濁: UCA 2次レベル および JIS X 4061 第1照合属性 – 大文字小文字: UCA 3次レベル および JIS X 4061 第2照合属性 • utf8mb4_ja_0900_as_cs_ks は上記に加えひらがなカタカナを判別 – UCA 4次レベル および JIS X 4061 第3照合属性 [db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セット と文字照合 32/65
  12. レプリケーション 少なくとも2001年 MySQL 3.23からレプリケーションはあった 2004年 MySQL 4.1 SSLサポート ‐ 2008年

    MySQL 5.1 binlog_format= ROW ‐ 2010年 MySQL 5.5 準同期レプリケーション ‐ 2013年 MySQL 5.6 GTID, MTS, チェックサム, 遅延レプリケーション ‐ 2015年 MySQL 5.7 マルチソースレプリケーション, グループレプリケーション ‐ 2018年 MySQL 8.0 JSONデータ型の部分更新をサポート ‐ 35/65
  13. メンテナンスリリース()での新機能追加 $ 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 3 8.0.3 2 8.0.4 2 8.0.12 6 8.0.13 6 8.0.14 9 8.0.16 8 8.0.17 4 8.0.18 8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よってWhat is Newの中にはない 40/65
  14. メンテナンスリリース()での新機能追加 「メンテナンスリリース」 だと言い張る 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 ‐ 8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よって公式ブログに記事は無い() 41/65
  15. SQLインターフェイスだけで出来る機能の拡充 もともと SET GLOBAL でオンライン変更できる変数は多い方だったと思う MySQL 5.7とそれ以降では innodb_buffer_pool_size もオンラインで変更できるようになった し

    ‐ SET GLOBAL を超えて、 mysqld-auto.cnf に設定を永続化できる SET PERSIST, SET PERSIST_ONLY が追加 更には RESTART ステートメントも備えて、 「リードオンリーの設定でさえSQLだ けで設定がいじれる」 45/65
  16. RDBMSっぽい機能 2018年 MySQL 8.0 CHECK制約 ‐ 降順インデックス ‐ 式インデックス ‐

    共通テーブル式(WITH句) ‐ Window関数(OVER .. PARTITION句) ‐ HASH JOIN ‐ ANTI-JOIN ‐ マルチバリューインデックス ‐ EXPLAIN ANALYZE ‐ 49/65
  17. RDBMSっぽい機能 MySQL Bugs: #3464: Constraints: support CHECK MySQL Bugs: #13375:

    Index with Desc sort feature MySQL Bugs: #16244: SQL-99 Derived table WITH clause (CTE) MySQL Bugs: #28957: Ordered Analytical Functions MySQL Bugs: #59025: MySQL does not support the hash join 59/65
  18. 参考リンク MySQL - Wikipedia FOSDEM 2015 with MySQL & MySQL

    20 years anniversary celebration! MySQL - 日本語対応について 今さらだけどMySQLとライセンス ASCII.jp:MySQLの古いバージョンがGPLでリリース MySQL Reference Manual for version 3.21.31. - The MySQL server license MySQL、PHPとのライセンス問題を解決する新除外条項を発表 - CNET Japan 64/65
  19. 参考リンク 漢(オトコ)のコンピュータ道: Good Bye MySQL 6.0 MySQL Lists: announce: MySQL

    6.0.11 Alpha has been released! デブサミ2011 【17-E-7】 MySQLユーザ会のこれまでとこれから MyNAができるまで MySQLの日本語コレーション - @tmtms のメモ [db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セット と文字照合 MySQL :: MySQL 8.0 Reference Manual :: 1.4 What Is New in MySQL 8.0 MySQL :: MySQL Classic Edition 65/65