my2sql資料閃回

zuozhengjun發表於2024-10-16

使用限制

  • 只能回滾DML, 不能回滾DDL
  • 使用回滾/閃回功能時,binlog格式必須為row,且binlog_row_image=full, DML統計以及大事務分析不受影響
  • MySQL8.0版本需要在配置檔案中加入default_authentication_plugin =mysql_native_password,使用者密碼認證必須是mysql_native_password才能解析
  • 此工具是偽裝成從庫拉取binlog,需要連線資料庫的使用者有SELECT, REPLICATION SLAVE, REPLICATION CLIENT許可權
  • 支援指定-tl時區來解釋binlog中time/datetime欄位的內容。開始時間-start-datetime與結束時間-stop-datetime也會使用此指定的時區, 但注意此開始與結束時間針對的是binlog event header中儲存的unix timestamp。結果中的額外的datetime時間資訊都是binlog event header中的unix timestamp

下載

wget https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql 
chmod +x my2sql  && mv my2sql /usr/local/bin/

更改資料

UPDATE `test`.`t1` SET `b` = 'aa' WHERE `id` = 2

確定flashback位置

mysql> show master status ;
+---------------+-----------+--------------+------------------+----------------------------------------------+
| File          | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                            |
+---------------+-----------+--------------+------------------+----------------------------------------------+
| binlog.000014 | 569558719 |              |                  | aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-35800 |
+---------------+-----------+--------------+------------------+----------------------------------------------+

找出誤操作的語句與開發確認

my2sql -user test -password=Zzj@123456   -mode repl -work-type rollback  -start-file binlog.000014  -start-datetime "2024-09-14 10:00:00"  -stop-datetime "2024-09-14 10:10:00"  -output-dir ./

回滾誤操作

$ ll
total 124M
-rw-r--r--  1 root root  107 Sep 14 10:09 biglong_trx.txt
-rw-r--r--  1 root root  288 Sep 14 10:10 binlog_status.txt
-rw-r--r--  1 root root  315 Sep 14 10:10 rollback.14.sql
$ cat rollback.14.sql 
UPDATE `test`.`t1` SET `b`='b' WHERE `id`=2;

資料閃回並不是萬能的,備份恢復是最後底線。

相關文章