DesignAssembler

備忘録に近い

MySQLのバックアップ

バックアップについて

バックアップの基本分類

バックアップの分類には以下の3種類があります

  1. フルバックアップ
  2. 差分バックアップ
  3. 増分バックアップ

フルバックアップ
ある時点でそのシステムで保存されている全てのデータをバックアップする方式です。

  • 欠点1 バックアップの時間が他に比べて長い
  • 欠点2 ハードウェアリソースへの負荷が他に比べて高い
  • 欠点3 サービス停止が必要

差分バックアップ
ログファイル(トランザクションログ)をバックアップすることで実現します。トランザクションログにはデータの変更操作の履歴が書かれているので、ログファイルをバックアップしておけばデータベースに対する変更操作をもう一度再現することが可能になります。 差分バックアップにもフルバックアップは必要です。

増分バックアップ
差分バックアップから冗長な部分を省いたものです。 復旧に必要なバックアップファイルが増えるので完全にデータを復旧できる可能性が最も低くなります。

どんなバックアップ方式を採用すべきか

バックアップ設計において考慮すべき4点

  1. いつの状態に復旧するか
  2. バックアップに使用できる時間(バックアップウィンドウ)
  3. リカバリに使用できる時間(リカバリウィンドウ)
  4. 何世代までのデータを残す必要があるか

次に、選択肢を示すと以下の4つになります。

  1. バックアップしない
  2. フルバックアップのみ
  3. フルバックアップ+差分バックアップ
  4. フルバックアップ+増分バックアップ

現実的には3か4が選ばれます。

リカバリ設計

バックアップ方式によってリカバリ方式が決まるのでバックアップ設計とセットで考えます。

障害直前の状態にデータを復旧させるためには、バックアップファイルをデータベースに戻してユーザーの変更文を再反映させなければなりません。 ここで、「リストア」をバックアップファイルを戻す作業とし、「リカバリ」をトランザクションログを適用して変更文を反映する作業とします。

リストアとロールフォワード

バックアップされていない分のトランザクションログはDBMS内に保存してあるので、この未バックアップのトランザクションログまで適用することで障害直前の状態に復旧します。

リストア及びリカバリの手順

  1. フルバックアップのファイルをデータベースに戻す(リストア)
  2. 差分(増分)バックアップしていたトランザクションログを適用する(リカバリ)
  3. データベースサーバーに残っているトランザクションログを適用する(ロールフォワード)

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

参考

l-w-i.net

MySQLのバックアップ運用について色々

naokihakamadaのブログ : mysql バックアップ・リストア - livedoor Blog(ブログ)

http://h50146.www5.hp.com/products/software/oe/linux/summary/reference/pdfs/MySQL-backup.pdf

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ