誤って削除したデータを復元するMySQLのデータテーブルに先立ち

デモ環境の説明:

CentOSのLinuxは1511年7月2日(コア)X_86リリースシステム 64は、 の最小に取り付けられた
公式バージョン5.7.22-22で、mysqlはタイマーevent_schedulerを開始するために、単一のMySQLは、MySQLインスタンス上で、オープン2つのインスタンスをバイナリインストールを使用してMySQLのバイナリバージョン= ON。更なる例が回動する2 MySQLのGTID
xtrabackup rpmパッケージ、バージョンのバージョン2.4.13を使用して

一日のフルバックアップと増分バックアップのbinlog一度MySQLのバックアップモード

第二に、シミュレーションライブラリ、データ復旧デモを削除します。

ヒント:もちろん、ここで、非ライブラリ作成環境がテーブルのシミュレーションを削除し、削除を実証することである、あなたは結果を知っています

:シミュレーション故障
テーブルtest1_eventの削除オンラインTESTDBのtest1_eventを誤って誤って以前のデータにデータを復元するためにMySQLのバイナリログファイルを生成する日のmysqlの+日のフルバックアップを使用して、ライブラリ内のテーブルを削除し
、復元説明:
公式の使用をお勧めしますこの方法は、公式されている実績のあるmysqlのbinlogの復旧、生産が(推奨される公式は以下の方法)の厳しい練習ではありません

次のように回復プロセスは次のとおりです。
2.1が誤って、以前に削除された受信おそらく初めてその誤用時に確認
ポイントの現在の主なライブラリbinlogの位置を確認するために2.2ログインを(バック復元する際に使用されるこの時間のbinlogファイルで覚えておきます)

(root@'mgr01':mysql3306.sock)[testdb]>show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000005
         Position: 15211
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: bde7b592-b966-11e9-8c64-000c294f3e61:1-10445
1 row in set (0.00 sec)

2.3次の最良のフラッシュログで、新に書き込まれ、次のSQLバイナリログファイルの作成
2.4ポイントDROP TABLE文binglogファイルをターゲットの場所を:

[root@mgr01 binlog]#  mysqlbinlog -v --base64-output=decode-rows   /data/mysql/mysql3306/binlog/mysql-bin.000005|grep -i -C 15 drop
###   @1=10422
###   @2='tomcat'
###   @3='xiaohuahua'
###   @4='2019-08-08 14:22:18'
# at 14987
#190808 14:22:18 server id 63306  end_log_pos 15018 CRC32 0x873943dd    Xid = 20695
COMMIT/*!*/;
#at15018###################################
#190808 14:22:19 server id 63306  end_log_pos 15083 CRC32 0xcc8773ce    GTID    last_committed=34   sequence_number=35  rbr_only=no
SET @@SESSION.GTID_NEXT= 'bde7b592-b966-11e9-8c64-000c294f3e61:10445'/*!*/;
#at 15083
#190808 14:22:19 server id 63306  end_log_pos 15211 CRC32 0x8d445019    Query   thread_id=7213  exec_time=0 error_code=0
use `testdb`/*!*/;
SET TIMESTAMP=1565245339/*!*/;
SET @@session.sql_auto_is_null=0/*!*/;
DROP TABLE `test1_event` /* generated by server */
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
#End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

ポイントの位置を特定するために15018バイナリログファイルの回復のエンドポイントを使用することです

:mysql3308例復元する2.5 xtrabackupバックアップ
ヒント:GTIDを開くためにmysqlの3308のインスタンスを

バックアップコマンドを復元します。

innobackupex --apply-log /data/backup/db_3306_20190808/
innobackupex  --defaults-file=/data/mysql/mysql3308/my3308.cnf --copy-back /data/backup/db_3306_20190808/

データディレクトリデータのmysql権限に:

 chown -R mysql.mysql /data/mysql/mysql3308/data/

mysql3308例を開始します。

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my3308.cnf   &

ビュー3308のインスタンスデータに戻りますが、欠落データの多くは背中の増分からのbinlogファイルは、データベースバック3306に残っているバックドロップテーブルtest1_eventこの期間中に取得していません。

| 10273 | tomcat   | xiaohuahua | 2019-08-08 14:17:16 |
| 10274 | tomcat   | xiaohuahua | 2019-08-08 14:17:18 |
+-------+----------+------------+---------------------+

(root@'mgr01':mysql3308.sock)[testdb]>select count(*) from test1_event;
+----------+
| count(*) |
+----------+
|    10273 |
+----------+
1 row in set (0.00 sec)

xtrabackupバックアップはGTID上にあるので、何のパラメータは、リカバリ・gtidsの--skipない場合は、mysqlbinlogはコマンド増分binglogファイルを使用してGTID情報のbinlogファイルを無視し、パラメータ--skip-gtidsを追加するために、データをリストアする場合は、次のそして、データ復旧未満3308ライブラリーを得

正しいrecoveryコマンドを次のように


mysqlbinlog    /data/mysql/mysql3306/binlog/mysql-bin.000001 --skip-gtids  |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog    /data/mysql/mysql3306/binlog/mysql-bin.000002 --skip-gtids  |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog    /data/mysql/mysql3306/binlog/mysql-bin.000003 --skip-gtids  |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog    /data/mysql/mysql3306/binlog/mysql-bin.000004 --skip-gtids  |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog    /data/mysql/mysql3306/binlog/mysql-bin.000005 --stop-position="15018"  --skip-gtids  |mysql -f --binary-mode  -S /tmp/mysql3308.sock 

パラメータ:
--skip-gtids GTID情報ファイルBINLOG無視する
中国の文字化けや特殊文字化けの問題解決するために、主--binary-modeを
エラーを無視して、-f強制回復を

上記のコマンドを実行した後、データはtest1_event前にテーブルを削除する復元することができます

データ回復につながることができ、次のコマンドは、3308上のMySQLインスタンスを復元することはできません:( my3308例はGTIDパラメータを開いて発生したため)


mysqlbinlog   /data/mysql/mysql3306/binlog/mysql-bin.000001 |mysql -f --binary-mode  -S /tmp/mysql3308.sock  
mysqlbinlog   /data/mysql/mysql3306/binlog/mysql-bin.000002 |mysql -f --binary-mode  -S /tmp/mysql3308.sock  
mysqlbinlog   /data/mysql/mysql3306/binlog/mysql-bin.000003 |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog   /data/mysql/mysql3306/binlog/mysql-bin.000004 |mysql -f --binary-mode  -S /tmp/mysql3308.sock 
mysqlbinlog --stop-position="15018"  /data/mysql/mysql3306/binlog/mysql-bin.000005|mysql -f --binary-mode  -S /tmp/mysql3308.sock 

開始する前に、新しいインスタンスmysql3308がmy3308.cnfのGTIDパラメータから閉鎖した場合2.6:
3.
この場合は使用mysqlbinlogは/data/mysql/mysql3306/binlog/mysql-bin.00000* | mysqlの-f --binaryモード -S /tmp/mysql3308.sockは3308 MySQLインスタンスにデータを復元しますが、エラー回復中にすることができます。3308データへのこのようなリターンは、
生成されたファイルは、情報GTIDをバイナリログに記録されていません


[root@mgr01 backup]# mysqlbinlog --stop-position="15018"  /data/mysql/mysql3306/binlog/mysql-bin.000005|mysql -f --binary-mode  -S /tmp/mysql3308.sock 
ERROR 1781 (HY000) at line 17: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.
ERROR 1781 (HY000) at line 50: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.
ERROR 1781 (HY000) at line 74: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.
ERROR 1781 (HY000) at line 98: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.

もちろん、次のように復元するために使用することができる、binglog同じ文書3308 GTID記録情報の一例ではないが、この方法は、完全性と正確性データのため、生産性を保証することができない、回復プロセスでエラーが発生する可能性が最高のデータ復旧を取得するには、このメソッドを使用しません

[root@mgr01 backup]# mysqlbinlog --skip-gtids  /data/mysql/mysql3306/binlog/mysql-bin.000001|mysql -f --binary-mode  -S /tmp/mysql3308.sock
ERROR 1050 (42S01) at line 27: Table 'test1_event' already exists
ERROR 1062 (23000) at line 92: Duplicate entry '1' for key 'PRIMARY'
ERROR 1537 (HY000) at line 132: Event 'e_test' already exists
mysqlbinlog --skip-gtids  /data/mysql/mysql3306/binlog/mysql-bin.000002|mysql -f --binary-mode  -S /tmp/mysql3308.sock
mysqlbinlog --skip-gtids  /data/mysql/mysql3306/binlog/mysql-bin.000003|mysql -f --binary-mode  -S /tmp/mysql3308.sock
mysqlbinlog --skip-gtids  /data/mysql/mysql3306/binlog/mysql-bin.000004|mysql -f --binary-mode  -S /tmp/mysql3308.sock
mysqlbinlog --skip-gtids --stop-position="15018" /data/mysql/mysql3306/binlog/mysql-bin.000005|mysql -f --binary-mode  -S /tmp/mysql3308.sock

ヒント:本番ほどデータとデータベースの同期を回復するだけでなく、同期エラーが非常に便利です解決最高のオープンGTID。

要約:

ドロップデータベースなどのDDL文の場合、この文の切捨て表には、mysqlbinlogはを使用して復元することができ、テーブルを削除し、テーブルをドロップします。同様のツールとして使用するbinlog2sqlフラッシュバック

binglogフォーマット行フォーマットかどうか、このようなステートメントのために、またはステートメントの形式または混合形式、バイナリログ形式は、行のフォーマットステートメントに記録されている
使用mysqlbinlogは唯一サポートデータベースレベルの抽出

時間回復のポイントまでのすべての機器+使用mysqlbinlogは
mysqlbinlogはを使用しては--skip-gtids大きなリスクポイントがあります

おすすめ

転載: blog.51cto.com/wujianwei/2430312