MySQLのバイナリログを利用したDBの復旧

どうも皆さんこんにちは、ホークスファンの市川です。

 

何らかの理由でデータベース(DB)のバックアップが取れていなかった場合(もしくは壊れてしまっていた場合)、

最後の頼みの綱「バイナリログ」を利用すればDBの復旧ができる(かもしれません)。

今回はMySQLのバイナリログを利用したDBの復旧手順を紹介していきます。

※キャプチャとか全くないです

 

前提条件

・バイナリログが残っている

・定時バックアップのファイルがある

 

定時バックアップファイルが無い場合

復旧は厳しいです…

バイナリログが残っている期間中のどこでもいいのでバックアップファイルが必要です。

ただし、MySQLのコマンドでDB全体をリストアしていた場合はリストア時のログがバイナリログ内に残っているため、

この場合は定時バックアップファイルが無くても復旧できます。

 

STEP1:バイナリログの確認

「var/lib/mysql」に「binlog.000083」のような名前のファイルがあるか確認します。

(設定によって場所やファイル名は変わります)

 

STEP2:復旧に利用するバイナリログのあたりをつける

日付もしくはサイズ毎にファイルが作成されているかと思われるため、ファイルの更新日時からおおよその見当をつけます。

(後述する「mysqlbinlog」コマンドを利用すれば正確な日時が確認できます)

 

STEP3:復旧用SQLの作成

バイナリログの中身は素のSQL文ではないため、実行するSQL文に変換が必要になります。

「mysqlbinlog」コマンドを利用することで、バイナリログの中身が人間でも読める形になり、いつどのようなSQLが発行されたかがわかります。

あとは、復旧を開始する時間以降のSQLを抽出すれば復旧用のSQLを作成することが可能です。

 

STEP4:復旧用SQLの実行

作成した復旧用のSQLを実行すれば、復旧完了です。

お疲れ様でした。