MySQLではどのようなバックアップ方法があるのか調べてみました。
バックアップの種類
まずMySQLには「物理バックアップ」と「論理バックアップ」という概念があります。
種類 | 説明 |
---|---|
物理バックアップ | データベースの内容を保存しているディレクトリやファイル自体をコピーする事でバックアップ |
論理バックアップ | MySQLサーバに対してクエリをかけた結果をエクスポートする事でバックアップ |
それぞれ特長をみていきましょう。
物理バックアップ
メリット
-
論理バックアップに比べて早い(リストア含む)
- バイナリファイルをただコピーするだけのため(データの変換が行われない)
- データベースだけではなく、関連ファイルもバックアップする事ができる
- 設定ファイルやログファイル等
デメリット
- 異なるデータベースやハードへの復元ができない
- バージョンが異なると復元が困難な時がある**(互換性がない)**
-
MEMORYテーブルのバックアップはできない(Enterprise除く)
- メモリーにデータが存在しており、物理的に存在しない
-
MySQLが停止中のみ実施可能
- 実行中に行う場合は、更新が走らないようにするためのロック制御を行う必要がある
- Enterpriseだと自動的にロック制御を行ってくれる
論理バックアップ
メリット
- データの柔軟性が高い(実体はただのテキストデータであるため編集が可能)
-
バックアップデータの粒度を細かく指定できる
- サーバレベル or データベース or テーブル
- バックアップデータはどこでも利用が可能**(ハード依存がない)**
- MySQLサーバが起動中に実施可能
- 全てのストレージエンジンでバックアップ可能
デメリット
- 物理バックアップに比べて遅い(リストア含む)
- バイナリ -> テキスト への変換が行われる
- ファイルへの書き出し
- 物理バックアップに比べてファイルサイズが大きくなる
- データベースの関連ファイルはバックアップされない
バックアップ方法
データをバックアップするたの方法もいくつか存在しています。(種類に該当するかもしれませんが。。。。)
- オンライン/オフラインバックアップ
- ローカル/リモートバックアップ
- スナップショットバックアップ
- 完全/増分バックアップ
- レプリケーションスレーブバックアップ
- (スナップショットバックアップ)
それぞれ簡単にですがまとめたいと思います。
オンライン/オフライン
MySQLサーバの状態が起動中(オンライン)、もしくは停止中(オフライン)なのかという違いです。
物理/論理バックアップにも記載しましたが、論理バックアップはオンラインで対応可能です。物理バックアップはロック制御をしない限りオフライン対応になります。
ローカル/リモート
バックアップの取得元がMySQLが起動しているサーバ(ローカル)、もしくは別サーバ(リモート)なのかという違いです。
完全/増分
特定次点のMySQLサーバにおいて全てのデータが含まれている(完全)、もしくは特定期間(ある点からある点)に行われたデータという違いです。増分バックアップにはMySQLサーバでバイナリログを有効化する必要があります。
レプリケーションスレーブ
マスター側ではなくスレーブ側でバックアップをする事もできます。
スナップショット
スナップショットとは、ある次点でのファイルシステムの論理コピー(論理バックアップではない)です。MySQLではこのバックアップからのバックアップ機能は存在していないので、LVM等を用いて行う必要があります。
まとめ
物理と論理だとどちらが使われているのか気になりました。大規模であればあるほど、停止させる事ができないので論理になるかなーと思ったり、時間短縮のためにメンテナンスとかを設けて定期的に停止して物理バックアップもしてそうだなーと思ったりもする。どっちでしょうかね?
。。。。。うん。。。両方してそうですね。。(どなたか教えてください。。)