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

2025年になってもまだMySQLが好き

Avatar for yoku0825 yoku0825
September 05, 2025

 2025年になってもまだMySQLが好き

2025/09/06 大吉祥寺.pm 2025
https://kichijojipm.connpass.com/event/361631/

Avatar for yoku0825

yoku0825

September 05, 2025
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. Why MySQL? MySQLは大きなブラックボックスアプリケーション SQLより下側は隠蔽されている(ことになっている) 実際は全然隠れてないあたりがかわいい ‐ 良くも悪くも素直 自分で考えても実行戦略が読めないようなのは遅い 自分で考えて遅そうな実行戦略になるのは遅い これなら速く終わるだろってやつは速い

    レプリケーションが壊れた時の原因は大体一瞬で想像がつく ‐ オンラインであることにこだわっている(それが正しいかどうかは置いておいて) ALTER TABLE中も読み書きさせたい 何ならバッファプールの再構成もオンラインでさせてあげたい テンポラリテーブルのDisk落ちもテンポラリテーブルの再構成なく継続させたい (8.0の一部期間のみ…) ただし運用のツケは自分で払わされる ‐ レプリケーションを使えば可能性は無限大 インデックスの追加も、カラムの追加も上手くやれば(カラムの先行追加は功夫が必要)レプリカ先行させてフェイルオーバーで済ませられ る バックアップの取得も、バージョンアップも、レプリカからなら気軽にいける ただし非同期レプリケーションの自動フェイルオーバーは無茶苦茶難しい ‐ 9/53
  2. 自前の監視 CPU使用率, Memory使用率, Swap使用率, Disk使用率 スローログの数, クエリ実行時間, レプリケーション遅延, デッドロック検出, エラーログ転送,

    Too many connections, Threads_Running, AUTO_INCREMENT, Uptime, .. yt-healthcheck ‐ テーブルごとの1か月にフェッチされた行の総数の変化, クエリタイプごとの1か月でのレイテンシの変 化, テーブルごとの行の総数の変化, .. yt-collect ‐ 15/53
  3. 自分たちのMySQL DBAと開発者でロールが分かれている場合に 開発者がMySQLまで監視するケースはそんなに多くない ⇒ 自分が早期発見の最後の砦になる ‐ 開発者がMySQLまで注意を払っていたとしても、アラートの経路は分断されている ⇒ 結局自分たちで鳴らした 方が早い

    ‐ MySQL側でしか気が付けないものはある レプリケーションの遅延はアプリケーションからは「その行が本当に存在しないのか」「まだ適用されていないだけなの か」はわからない ‐ 必ず何らかの操作が必要なものはある レプリケーションスレッドが止まってたらまず間違いなく原因を取り除いて START REPLICA しないといけない ‐ 16/53
  4. 自分たちのMySQL DBAと開発者でロールが分かれている場合に 開発者がMySQLまで監視するケースはそんなに多くない ⇒ 自分が早期発見の最後の砦になる ⇒ 本当 に? ‐ 開発者がMySQLまで注意を払っていたとしても、アラートの経路は分断されている

    ⇒ 結局自分たちで鳴らした 方が早い ‐ MySQL側でしか気が付けないものはある レプリケーションの遅延はアプリケーションからは「その行が本当に存在しないのか」「まだ適用されていないだけなの か」はわからない ‐ 必ず何らかの操作が必要なものはある レプリケーションスレッドが止まってたらまず間違いなく原因を取り除いて START REPLICA しないといけない ‐ 17/53
  5. 自分たちのMySQL DBAと開発者でロールが分かれている場合に 開発者がMySQLまで監視するケースはそんなに多くない ⇒ 自分が早期発見の最後の砦になる ⇒ 本当 に? ‐ 開発者がMySQLまで注意を払っていたとしても、アラートの経路は分断されている

    ⇒ 結局自分たちで鳴らした 方が早い ‐ MySQL側でしか気が付けないものはある レプリケーションの遅延はアプリケーションからは「その行が本当に存在しないのか」「まだ適用されていないだけなの か」はわからない ⇒ やりようはある ‐ 必ず何らかの操作が必要なものはある レプリケーションスレッドが止まってたらまず間違いなく原因を取り除いて START REPLICA しないといけない ‐ 19/53
  6. アプリケーションによるハートビート INSERT だけで救える命もある(特に REPLICATION CLIENT 権限が許されない(= SHOW REPLICA STATUS が使えない)環境ではこれしかない)

    毎回これチェックしてからSELECT投げてると致命的に遅いけれども ‐ そもそも遅延が問題になるテーブルはレプリカから読んではいけないという前提はあれども ‐ INSERT INTO heartbeat (hostname, app_time, server_time, gtid_executed) VALUES (@@hostname, ?, NOW(3), @@global.gtid_executed) yt-heartbeat 20/53
  7. 自分たちのMySQL DBAと開発者でロールが分かれている場合に 開発者がMySQLまで監視するケースはそんなに多くない ⇒ 自分が早期発見の最後の砦になる ⇒ 本当 に? ‐ 開発者がMySQLまで注意を払っていたとしても、アラートの経路は分断されている

    ⇒ 結局自分たちで鳴らした 方が早い ‐ MySQL側でしか気が付けないものはある レプリケーションの遅延はアプリケーションからは「その行が本当に存在しないのか」「まだ適用されていないだけなの か」はわからない ⇒ やりようはある ‐ 必ず何らかの操作が必要なものはある レプリケーションスレッドが止まってたらまず間違いなく原因を取り除いて START REPLICA しないといけない ⇒ これは未だにそうっちゃそうだけども ‐ 21/53
  8. MySQL and MariaDB 似たようなもの? JavaとJavaScriptくらい? そんなには違わない ‐ Apache httpdとnginxくらい? これも遠すぎる気がする

    ‐ イギリス英語とアメリカ英語くらい? 歴史が長すぎる気がする ‐ redisとvalkeyくらい? アレはまだそんなに差ができてないのでは? ‐ DebianとUbuntuくらい? ‐ 30/53
  9. MySQL and MariaDB MariaDBの起源はMySQL 5.1 + Mariaストレージエンジンパッチ Maria is a

    new storage engine that Guilhem, Sanja, Sergei and I have been working on for the last 2 years. なのでもともとはMySQL 5.0ベースで開発されていたかも Monty says: The Maria engine is released ‐ You can find the release at http://dev.mysql.com/downloads/maria/index.html Monty says: Maria build & public MySQL architecture meeting ‐ 色々な経緯がありそう Monty says: MySQL conference; The good, the bad and the ugly ‐ Maria Engine ‐ The Future of MySQL (The Project) ‐ Ghosts of MySQL Past Part 5: The Era of Acquisitions ‐ 35/53
  10. Point of No Return MariaDBはMySQL 5.6を待たずに5.5のコードベースに機能を追加した10.0をリリース 5.6は〇racle買収後に開発が始まっているので、リリースに懐疑的だったんだろうと思う ‐ MariaDB 10.0で追加されたGTIDとマルチソースレプリケーションはMySQL

    5.6/5.7のものと実装レベルでも SQLレベルでも互換性がない ‐ この当時思ったのは「ストレージエンジンの幕の内弁当」 ‐ このセカンドインパクトから既に13年 38/53
  11. Days of Sisters MySQLにとっての暗黒時代 8.0 Maintenance Release(パッチバージョンのみのインクリメント)で機能が追加され、オプションは非推奨にされ、 デフォルトだった動作が変更されたりするやつ ‐ 今だからこそ「MySQL

    8.4が出てからトークで話すネタなくなった」とか言っていられるけれども ‐ MariaDBにとってのチャレンジ 10.3 SEQUENCE , MariaDB SQL/PL, sql_mode=EMPTY_STRING_IS_NULL MariaDB 10.3 Changes & Improvements ‐ 明らかに何かからシェアを奪う気満々だった時期 ‐ この辺から(だと思う)MariaDBのサイトから “DROP IN REPLACEMENT” の文字が消えた ‐ 40/53
  12. Recent Situation MariaDB / MySQLとも Short-termとLong-termを使い分けるように MariaDB “preview release” は1年間のサポート、

    “rolling release” は3か月間のサポート(最近のは rolling release) ‐ MySQL “Innovation release” は3か月間のサポート ‐ MySQL 8.0は2026/04にEOL, MariaDB 10.6は2026/07にEOL https://www.oracle.com/us/assets/lifetime-support-technology-069183.pdf ‐ https://mariadb.org/about/ ‐ 42/53
  13. コレジャナイ 俺の 🐬は コレジャナイ [root@d72a47a0507a /]# yum install mysql Loaded

    plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/4): base/7/x86_64/group_gz | 153 kB 00:00:00 (2/4): base/7/x86_64/primary_db | 6.1 MB 00:00:00 (3/4): extras/7/x86_64/primary_db | 253 kB 00:00:00 (4/4): updates/7/x86_64/primary_db | 27 MB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package mariadb.x86_64 1:5.5.68-1.el7 will be installed .. 51/53