MySQLアーキテクチャと運用設計の学習ノート

MySQLの内部構造と実践的設計指針

主要なリファレンスリソース

ストレージエンジンの確認

使用可能なストレージエンジンの一覧を表示:

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 InnoDB Database Design Sharding High Availability

6月14日 22:42 投稿