リカバリ方式について特徴と、実現手法を記載します。
| 特徴 | MySQL実現手法 | Oracle実現手法 | |
|---|---|---|---|
| 物理ファイルバックアップ時点までの復旧 |
|
|
|
| 論理バックアップ時点までの復旧 |
|
|
|
| 障害時点までの復旧(ロールフォワード) |
|
|
|
| クラッシュリカバリ |
|
|
|
| スタンバイデータベースのマスター化 |
|
|
|
| フラッシュバックデータベース |
|
|
|
障害直前まで早期回復が可能となる、物理ファイル復元+ロールフォワードがMySQLでもお勧めです。
MySQLのバックアップリカバリの推奨手順として、物理ファイルのオンラインバックアップリカバリの実例を示します。環境はLINUX+ローカルディスクを想定しています。

LVM Snapshotはオンラインバックアップ時にボトルネックとなるロック時間を圧縮します。
【補足】Oracleのオンラインバックアップ優位点としてロックをかけずに取得可能(Redoログ出力量は増えます)
【参照】MySQLブログ「MySQLのオンラインバックアップ手順」
弊社検証環境でのバックアップリカバリ時間を参考までに紹介します。
「MySQL Enterpriseの検索性能とスケーラビリティ」と同等。ただし高価用性ソリューションであるDRBD上で実施しているため、5~10%程度通常より遅くなっています。(DRBDはOSブロックレベルの遠隔ミラーリングソリューションです)
バックアップファイルサイズトータル:4.5GB
900万件テーブル(InnoDB)×1、 100万件テーブル(InnoDB)×1、100万件テーブル(MyISAM)×2
| Flush tables with read lock + snapshot | Mysqldump | Coldバックアップ | |
|---|---|---|---|
| FLUSH TABLES With Read Lock+Lvcreate~snapshotのマウント | 5秒程度 | - | - |
| 物理ファイルコピー | 1分41秒 | - | 2分程度 |
| Snapshotのアンマウントと削除 | 4秒程度 | - | - |
| Mysqldumpコマンド | - | 1分20秒 | - |
| ファイルリストア | 6分15秒 | - | 6分程度 |
| Mysqldump反映 | - | 35分2秒 | - |
| ロールフォワードSQL作成 | 1秒程度 | 1秒程度 | 1秒程度 |
| ロールフォワード(100万件テーブルの反映) | 25秒程度 | 25秒程度 | 25秒程度 |
テーブルが1000万件程度の環境では高価な共有ストレージ機能を利用しなくてもバックアップは十分に可能ですが、Mysqldumpのリストアにはある程度時間を要します。
MySQLも他の商用RDBMSと同様に様々なバックアップ手法が用意されています。Oracleとの比較例を以下に記載します。
■物理バックアップ
| 特徴 | MySQL実現手法 | Oracle実現手法 |
|---|---|---|
|
|
|
■物理バックアップ
| 特徴 | MySQL実現手法 | Oracle実現手法 |
|---|---|---|
|
|
|
■論理バックアップ
| 特徴 | MySQL実現手法 | Oracle実現手法 |
|---|---|---|
|
|
|
■レプリケーション(スタンバイデータベース)
| 特徴 | MySQL実現手法 | Oracle実現手法 |
|---|---|---|
|
|
|
■増分バックアップ(トランザクションログ)
| 特徴 | MySQL実現手法 | Oracle実現手法 |
|---|---|---|
|
|
|
オンライン中に取得が可能で速度が速い、オンライン物理バックアップのニーズが高いと考えます。
MySQLもOracleと同じように多様なバックアップ選択肢があり、運用スタイルあったバックアップを選択できます。
MySQLのトランザクションログはバイナリログと呼ばれます。
MySQLのバイナリログは、OracleでいうRedoログ、アーカイブログに該当し、バックアップリカバリやレプリケーションにおいて、非常に重要な役割を持ちます。
| MySQLバイナリログ | Oracle Redoログ | |
|---|---|---|
| 用途 | ロールフォワードリカバリ スタンバイデータベース(DRサイト、レプリケーション) (InnoDBのクラッシュリカバリにはInnoDBログを利用、InnoDBログは物理論理ロギング方式) |
ロールフォワードリカバリ クラッシュリカバリ スタンバイデータベース(DR サイト等) |
| ファイル形式 | バイナリファイル (ロールフォワードリカバリ時はMysqlbinlogコマンドにより、SQL文に変換) |
バイナリファイル (ロールフォワードリカバリ時は対象ディレクトリに配置、ogMinerにより解析可能) |
| ロギング方式 | 論理ロギング (SQL文レベルのロギング) |
物理論理ロギング (SQL文レベル+更新ブロックレベルのロギング) |
| 書込みタイミング | 「sync_binlog=1」指定でCommitと同時 指定しないと非同期書込み |
Commit時 Redoログバッファの1/3を消費した場合 |
| ログスイッチ | ログが1Gを超えた時点、MySQLサーバの起動時、Flush Log文発行時にログスイッチが発生する | Alter system switch log文発行時 |
| ログローテーションとアーカイブ | ログスイッチ時に新規ファイルに書込みが開始、ログファイルの再利用(カレントのローテート)はしない | オンラインRedoログがローテーション、アーカイブログモード時は、オンラインRedoログのスイッチ時にアーカイブ |
| 出力制御 | 出力なし設定可能 | ノーアーカイブログモードが可能、Redoログは必須 |
起動パラメータ「sync_binlog = 1 」を推奨します。このパラメータを指定することでCommit時のバイナリログ同期書込みが保障されます。
ただし、Ext3ファイルシステムでは更新系パフォーマンスの影響があるため、パフォーマンスとトレードオフの関係となります。