MySQLの内部構造と実践的設計指針
主要なリファレンスリソース
- 公式ドキュメント: MySQL 8.0 Reference Manual
- InnoDBアーキテクチャ: InnoDB Storage Engine Architecture
- SQLパースと実行フロー: MySQLサーバーソースコード(
sql/sql_parse.cc経由でクエリ処理が開始) - データベース設計支援ツール: Archery(SQL審査・実行可視化対応)
ストレージエンジンの確認
使用可能なストレージエンジンの一覧を表示:
SHOW ENGINES;
ログサブシステムの種類と役割
| ログタイプ | 用途 | 永続化対象 |
|---|---|---|
| Redo Log | クラッシュリカバリ時の変更再適用(WAL: Write-Ahead Logging) | InnoDB専用、トランザクションの物理ログ |
| Undo Log | ロールバックとMVCC(マルチバージョンコンカレンシコントロール)の提供 | InnoDB内部の論理ログ |
| Binlog | レプリケーション、ポイントインタイムリカバリ | 論理ログ(ステートメント or 行単位) |
| Slow Query Log | 実行時間の長いクエリの監視 | 設定時間超過のSELECT/UPDATE等 |
| Error Log | 起動エラー、重大障害の記録 | OSレベル含む異常イベント |
ACID特性の実現メカニズム
- 原子性: Undoログによるロールバック保証
- 一貫性: データ整合性制約(外部キー、チェック制約)
- 隔離性: MVCC + インテンションロックによる同時実行制御
- 永続性: Redoログのディスク書き込み(innodb_flush_log_at_trx_commit)
テーブル定義の変更操作
新規カラムの追加例(特定カラムの後に挿入):
ALTER TABLE t_server_deployment_info
ADD COLUMN is_nameserver_co_deployed CHAR(1) DEFAULT 'N'
COMMENT 'NameServerとの共存デプロイ有無' AFTER host_name;
複合インデックスの作成例:
ALTER TABLE monitoring_event_log
ADD INDEX idx_server_time(hostname, event_timestamp);
高可用性構成パターン
- MHA (Master High Availability): 自動フェイルオーバー対応
- Group Replication (MGR): PAXOSプロトコルによる同期レプリケーション
- PXC (Percona XtraDB Cluster): Galeraクラスタを使用したマルチマスタ構成
- Orchestrator: レプリケーショントポロジーの自動管理とリカバリ
スケーラビリティ設計:分離戦略の種別
1. 単一データベース/単一テーブル
想定データ量:5000万件未満
命名規則:order_db.t_order
2. 100シャード/10分割方式
利用条件:総データ量100億件未満、分散キーに偏りがないこと
例: merchant_{xx}_db.t_merchant_order_{y}
分割ロジック:
- DB番号 xx = メルチャントIDの下2桁(例: MC201503110074 → 07)
- テーブル番号 y = メルチャントIDの最下位1桁(例: ...74 → 4)
3. 多セット型100シャード/10分割
大規模データ向け(100億件超)
命名例: account_set{ss}_{xx}_db.t_account_{y}
分割キー: ユーザーID(Fuid)
- セット番号 ss = Fuid ÷ 10,000,000 の商(例: 23451235 → 02)
- DB番号 xx = Fuidの下2桁(例: ...1235 → 23)
- テーブル番号 y = 最下位1桁(例: ...235 → 5)
4. 年次DB/日次テーブル方式
時系列データ向け(更新の少ないログ系データ)
命名例: order_{yyyy}_db.t_order_daily_{mmdd}
分割キー: 注文ID内の日付情報(例: O20151125... → 2015年11月25日)
運用上の制限事項
- タイプ2~4のシャーディングスキームは事前DBAレビュー必須
- 単一テーブルはタイプ2~4のDB内に作成禁止
関連技術コミュニティと専門家
中国国内のデータベース技術コミュニティ:
- Enmo Academy(恩墨学院)
- ZSTC(知数堂)
- ArkDB(極数雲舟)
著名なMySQL技術者: Jiang Chengyao, Ding Qi, Yang Jianrong など
参考文献と学習資料
- 尚硅谷宋紅康氏によるMySQL講座(Bilibili / YouTube)
- GitHubリポジトリ: learn_db
- TDSQL、MariaDBのバイナリログ仕様比較