MySQL資料一覧

インクリメンタルバックアップ(差分バックアップ)の方法

2007/12/19更新

対応バージョン: 5.0.51

バックアップ運用を行うにあたりデータベースの総量が増えてくると毎回フルバックアップを取得するのに時間もかかりディスク容量も必要とする。

そのような場合、前回バックアップ以降はインクリメンタルバックアップを使用する方法がある。

インクリメンタルバックアップのログファイルは自動的に取得され、/usr/local/mysql/var配下に以下のようなファイル名で作成される。

-rw-rw---- 1 mysql mysql 14940 2007-12-13 12:43 mysql-bin.000001
-rw-rw---- 1 mysql mysql   117 2007-12-13 12:43 mysql-bin.000002
-rw-rw---- 1 mysql mysql   255 2007-12-13 15:22 mysql-bin.000003
-rw-rw---- 1 mysql mysql   117 2007-12-13 15:37 mysql-bin.000004
-rw-rw---- 1 mysql mysql  3995 2007-12-18 19:03 mysql-bin.000005
-rw-rw---- 1 mysql mysql   325 2007-12-18 19:09 mysql-bin.000006
-rw-rw---- 1 mysql mysql   268 2007-12-18 19:12 mysql-bin.000007
-rw-rw---- 1 mysql mysql 22655 2007-12-18 19:35 mysql-bin.000008
-rw-rw---- 1 mysql mysql   152 2007-12-18 19:20 mysql-bin.index

最後のmysql-bin.indexはテキストファイルで、ログファイルの一覧(mysql-bin.000001〜000008)が記載されている。

このログファイルはMySQLサーバ起動時に1ずつインクリメントされ、前回のログファイルは使われなくなる。

使われなくなったログファイルはそのままではディスクを消費するだけなので、例えばフルバックを取得する際に--delete-master-logsオプションを付けることによって不要なファイルが削除される(ただしレプリケーション環境において当該サーバがマスタの場合、--delete-master-logsを使用するとスレーブとの同期が取れなくなる恐れがあるのでPURGE MASTER LOGSを使用する)。

# mysqldump --single-transaction --flush-logs --master-data \
--all-databases --delete-master-logs > backup.sql

尚、--flush-logsオプションはログファイルの切り替え指示、--master-dataオプションは以下のようにログファイル名をバックアップファイル中に出力する指示である。

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=98;

バックアップを伴わずにログファイルだけを切り替える場合は以下のようにする。

# mysqladmin flush-logs

関連資料・記事