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

MySQLアンカンファレンス01_mysqlredo

tom--bo
February 03, 2024

 MySQLアンカンファレンス01_mysqlredo

tom--bo

February 03, 2024
Tweet

More Decks by tom--bo

Other Decks in Technology

Transcript

  1. ⽬次 • 背景 • 障害回復のための”ログ”についておさらい • MySQL, InnoDBにおける”ログ” • Innodb

    Redoログのダンプツール紹介 • ログフォーマット • mysqlredoの実⾏例 • まとめ 2
  2. 背景 • Cloud NativeなDBで”Log”を活⽤するケースをよく⾒る • MySQL(Innodb)における”Log”ってどうなっているんだっけ? 左図: Amazon Aurora: Design

    Considerations for High Throughput Cloud-Native Relational Databases 右図: AlloyDB for PostgreSQL under the hood: Intelligent, database-aware storage (⻩緑がlog 紫がmetadata) Amazon Aurora AlloyDB (Google) 3
  3. 障害回復のためのログについておさらい • 障害は⼤きく3種類 1. トランザクション障害 • コミットが完了するまでの異常(デッドロックや⾃主的なアボートなど) 2. システム障害 •

    ハードウェア・ソフトウェアの何らかの理由でプロセスがダウン 3. メディア障害 • ハードディスクの故障などで記憶装置からデータが読めなくなる 4
  4. 障害回復のためのログについておさらい • 障害回復は⼤きく3種類 1. トランザクション障害 • コミットが完了するまでの異常(デッドロックや⾃主的なアボートなど) 2. システム障害 •

    ハードウェア・ソフトウェアの何らかの理由でプロセスがダウン 3. メディア障害 • ハードディスクの故障などで記憶装置からデータが読めなくなる トランザクションによる更新のログ(or ジャーナル) を残すことで対応 5
  5. MySQLにおける”ログ”はInnoDBの”ログ” • 8.0以降システムテーブル(ibdata1), データディクショナリ (mysql.ibd, 以降DD)がInnoDBで管理されている • https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-transactional- storage.html •

    https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html • MySQLのシステムデータ(メタデータ)とInnoDBで作成される テーブルはInnoDBのログで障害回復できる • Original MySQLではInnoDB以外のSEはトランザクショナルではない • (MySQL ClusterのNDB SEは未調査) 12
  6. MySQLにおける”ログ”はInnoDBの”ログ” • Innodb Redoログ • InnoDBのテーブルはこのredoログだけで障害回復できる • InnoDB Undoログ •

    実態はUndoテーブルスペース • “An undo log is a collection of undo log records associated with a single read-write transaction. An undo log record contains information about how to undo the latest change by a transaction to a clustered index record” https://dev.mysql.com/doc/refman/8.0/en/innodb-undo-logs.html 13
  7. mysqlredoコマンド • ビルド⽅法 • mkdir bld; cd bld • cmake

    ... (options) • make mysqlredo … (options) • コマンド説明 • mysqlredo –start-lsn=xxx —stop-lsn=yyy filename • 引数に読みたいredologファイルを指定 • 開始/終了 LSNを—star-lsn, --stop-lsnで指定可能 • -v でverbose output 18
  8. データブロック(通常ブロック) • m_hdr_no(4): ブロック番号(lsnから計算) • m_data_len(2): データ⻑(ヘッダを含むデータの終端位置) • m_first_rec_group(2): MTRの開始オフセット

    (0ならこのブロックで開始したMTRはない) • m_epoch_no(4): ブロック番号(lsnから計算) m_hdr_noの計算 m_epoch_noの計算 24
  9. ログレコード • レコードヘッダ • type(1): レコードタイプ • space_id(1~6): スペースID •

    page_no(1~6): ページ番号 • Payload: typeごとに固有の形式 (図WIP) 25
  10. 気になっていること • 各log typeの中⾝ • Undoテーブルスペースの仕組み • 他のDBのredo, undoログ •

    MariaDBだとInnoDB Redoログを削減する改良をしているらしい • Redoログの並列化や並列リカバリ技法 29