データベースはInnoDBとMyIsamの混在状況です。
またバックアップは、LVMを用いたデータベースディレクトリ(/var/lib/mysql)のスナップショットを毎日保存しているものとします。
もし可能であるとしたら、その方法を教えてください。
特定のデータベースだけ◯日前の状態に戻す、というような事はできますか?
出来ない。
これは MySQL に限らずほぼすべての RDBMS にいえること。
状態を戻す機能を備えている物も一部あるが、原則として一つのインスタンスが管理しているデータベースすべてを同時に
というのが基本。
もちろん「◯日前の状態」のバックアップデータがあれば、全く別のDBにレストアし
該当データベース部分のみ抽出、その後元のデータベースにその部分のみ差し替えという対処は出来る。
LVMを用いたデータベースディレクトリ(/var/lib/mysql)のスナップショットを毎日保存
FLUSH TABLES などのコマンドを用いてDBの持っているキャッシュとファイルシステムの同期は取っていますか?
取っていないならそれは強制シャットダウンした時と同様、壊れたDBでしかない。
壊れたDBからでもある程度の復旧作業は行うので、使える可能性はあるがそれはあくまで最悪の手段であり
バックアップとは呼ばない。
スナップショットを取得するなら、特定時点で停止状態の MySQL データすべての保存(コールドバックアップ)と
その時点からの、MySQL のバイナリログをスナップショットで取得という形にするべき。
コールドバックアップデータ+バイナリログによる復元であれば整合性を持った形でレストア可能。
> 出来ない。
> これは MySQL に限らずほぼすべての RDBMS にいえること。
まさに。実はこれが期待していた答え。できないということをちゃんと知りたかったんです。
でないと、それをする方法を探して無駄に時間を割いてしまうので。
しかも、他のRDBMSも同様という事で、RDBMSを使う上で、何が可能で何が不可能なのかちょっと見えました。
ありがとうございます。
それから、スナップショットに対するサジェスチョンですが、こちもありがとうございます。
私の作ったバックアップスクリプトの中では、
まず、flush tables with read lock; でデータベースを共有ロックし、
スナップショットを取って、show master status; で、バイナリログの位置を確認した後、
ロックを解除して、スナップショットからその論理ドライブをダンプし、
スナップショットを解放するという事をしています。
試行錯誤で作ったスクリプトですが、期待どうり、無事バックアップが安全に取れればと思います。