問題の説明
データの誤った削除、特定の時点より前のデータの統計(タイムスタンプフィールドなし)など。特定の時点にデータを復元する必要があるシナリオは数多くあります。
この記事のメモには、特定の時点にデータを復元する方法が記録されています。
解決
方法:データを特定の時点に復元します。(1)その時点で作成されたバックアップがあるか、(2)SQLステートメントの実行履歴を知り、前のバックアップに基づいてSQL再生を実行する必要があります。
対比:(1)の方法は普遍的ではなく、将来どの時点のデータが必要になるかを予測することは困難です。通常、既存のバックアップに基づいて、binlogを使用して再生する(2)メソッドを使用します。
補足:もちろん、binlogに加えて、SQLの実行履歴がある限り、理論的には再生に使用できます。
mysqldump + binlog
プロセス: mysqldumpで作成されたバックアップをデータベースにインポートしてから、binlog再生を実行します。
要件: mysqldumpを使用したバックアップの場合、バックアップの作成時にbinlogの場所を記録して、再生中に場所を指定する必要があります。
XtraBackup + binlog
プロセス: Xtrabackupで作成されたバックアップをデータベースにインポートしてから、binlog再生を実行します。
補足: XtraBackupを使用したバックアップの場合、binlogの場所はバックアップディレクトリに保存され、データを直接復元できます。
XtraBackup + binlogを使用して復元します
前提条件と注意事項
1)binlog再生の基礎として履歴バックアップデータを用意します
。2)binlogに多くのデータベースの変更履歴を含め、他のデータベースに影響を与えないようにフィルタリングに注意します。
最初のステップは、バックアップと復元を使用する
Xtrabackupを使用してデータを回復します。データ回復プロセスは繰り返されません。
2番目のステップ、再生の範囲を決定します(キーステップ)
データベースの現在のbinlogファイルのステータスをチェックして、使用しようとしているbinlogファイルがまだ存在していることを確認します。
mysql> SHOW BINARY LOGS; + ------------------ + ----------- + | Log_name | File_size | + ------------------ + ----------- + | mysql-bin.000001 | 126 | | mysql-bin.000002 | 1306 | | mysql-bin.000003 | 126 | | mysql-bin.000004 | 497 | + ------------------ + ----------- +
現在使用中のbinlogファイル(ファイル)を表示します。
mysql> SHOW MASTER STATUS; + ------------------ + ---------- + -------------- + ---- -------------- + | ファイル| 位置| Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- -------------- + | mysql-bin.000004 | 497 | | | + ------------------ + ---------- + -------------- + ---- -------------- +
XtraBackupが作成されたときのbinlogの場所を確認します。
#cat / path / to / backup / xtrabackup_binlog_info mysql-bin.000003 57
次に、データ回復の終了時点(データが破棄される前)を決定する必要があります。
#mysql-bin.000003とmysql-bin.000004の間の履歴に注意を払う必要があります mysqlbinlog "/path/to/datadir/mysql-bin.000003" "/path/to/datadir/mysql-bin.000004" \ --start-position = 57> mybinlog.sql
以上の手順により、再生開始位置と終了時刻を決定し、再生を行うことができます。
3番目のステップは履歴を再生することです
#!/ bin / sh mysqlbinlog /path/to/datadir/mysql-bin.000003 /path/to/datadir/mysql-bin.000004 \ --start-position = 57 --stop-datetime = "11-12- 25 01:00:00 "| mysql -u root -p
関連記事
「XtraBackup」-バックアップデータ
「MySQL」の「準備」操作-データのバックアップとリカバリ(移行)にmysqldumpを使用「XtraBackup」-バックアップ
インスタンスとインスタンスリカバリ