「MySQL」-データを特定の時点に復元します@ 20210225

問題の説明

データの誤った削除、特定の時点より前のデータの統計(タイムスタンプフィールドなし)など。特定の時点にデータを復元する必要があるシナリオは数多くあります。

この記事のメモには、特定の時点データを復元する方法が記録されてます。

解決

方法:データを特定の時点に復元します。(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」-バックアップ
インスタンスとインスタンスリカバリ

参照

PerconaXtraBackupドキュメント/ポイントインタイムリカバリ

おすすめ

転載: blog.csdn.net/u013670453/article/details/114107504