MySQLのバックアップ
バックアップについて
バックアップの基本分類
バックアップの分類には以下の3種類があります
フルバックアップ
ある時点でそのシステムで保存されている全てのデータをバックアップする方式です。
- 欠点1 バックアップの時間が他に比べて長い
- 欠点2 ハードウェアリソースへの負荷が他に比べて高い
- 欠点3 サービス停止が必要
差分バックアップ
ログファイル(トランザクションログ)をバックアップすることで実現します。トランザクションログにはデータの変更操作の履歴が書かれているので、ログファイルをバックアップしておけばデータベースに対する変更操作をもう一度再現することが可能になります。
差分バックアップにもフルバックアップは必要です。
増分バックアップ
差分バックアップから冗長な部分を省いたものです。
復旧に必要なバックアップファイルが増えるので完全にデータを復旧できる可能性が最も低くなります。
どんなバックアップ方式を採用すべきか
バックアップ設計において考慮すべき4点
- いつの状態に復旧するか
- バックアップに使用できる時間(バックアップウィンドウ)
- リカバリに使用できる時間(リカバリウィンドウ)
- 何世代までのデータを残す必要があるか
次に、選択肢を示すと以下の4つになります。
現実的には3か4が選ばれます。
リカバリ設計
バックアップ方式によってリカバリ方式が決まるのでバックアップ設計とセットで考えます。
障害直前の状態にデータを復旧させるためには、バックアップファイルをデータベースに戻してユーザーの変更文を再反映させなければなりません。 ここで、「リストア」をバックアップファイルを戻す作業とし、「リカバリ」をトランザクションログを適用して変更文を反映する作業とします。
リストアとロールフォワード
バックアップされていない分のトランザクションログはDBMS内に保存してあるので、この未バックアップのトランザクションログまで適用することで障害直前の状態に復旧します。
リストア及びリカバリの手順
- フルバックアップのファイルをデータベースに戻す(リストア)
- 差分(増分)バックアップしていたトランザクションログを適用する(リカバリ)
- データベースサーバーに残っているトランザクションログを適用する(ロールフォワード)
MySQLでのバックアップ/リストア
mysqlでのバックアップにはmysqldumpコマンド、mysqlbinlogを使います。これらのコマンドはmysqlと一緒にインストールされます。
フルバックアップは以下のように実行します。
$ mysqldump -u (ユーザー名) -p --single-transaction (データベース名) > (バックアップファイル名)
具体的には以下のようになります。
$ mysqldump -u dev_user -p --single-transaction development > full_backup.dump
$ mysqldump -u (ユーザー名) -p --single-transaction --flush-logs --master-data --all-databases --delete-master-logs (データベース名) > (バックアップファイル名)
具体的には以下のようになります。
mysqldump -u dev_user -p --single-transaction --flush-logs --master-data --all-databases --delete-master-logs development > differental_backup.sql
増分バックアップ
mysqlbinlogコマンドでバックアップ、リカバリするにはmy.confの設定が必要になります。
/etc/my.cnfの[mysqld]に以下を記述してください。
#/etc/my.cnf [mysqld] log-bin=mysql-bin expire_logs_days=7
これで吐かれたログファイル名をmysqlbinlogで指定してリカバリします。
$ mysqlbinlog mysql-bin.000000 | mysql -u dev_user -p
参考
naokihakamadaのブログ : mysql バックアップ・リストア - livedoor Blog(ブログ)
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2012/03/16
- メディア: 単行本(ソフトカバー)
- 購入: 21人 クリック: 316回
- この商品を含むブログ (23件) を見る