欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL使用MyFlash快速恢復(fù)誤刪除和修改的數(shù)據(jù)

 更新時(shí)間:2024年06月16日 10:26:05   作者:小畢超  
MyFlash 是由美團(tuán)點(diǎn)評(píng)公司技術(shù)工程部開發(fā)并維護(hù)的一個(gè)開源工具,主要用于MySQL數(shù)據(jù)庫的DML操作的回滾,MyFlash的優(yōu)勢(shì)在于它提供了更多的過濾選項(xiàng),使得回滾操作變得更加容易,本文將實(shí)驗(yàn)通過 MyFlash 工具快速恢復(fù)誤刪除 或 誤修改的數(shù)據(jù),需要的朋友可以參考下

一、MyFlash

MyFlash 是由美團(tuán)點(diǎn)評(píng)公司技術(shù)工程部開發(fā)并維護(hù)的一個(gè)開源工具,主要用于MySQL數(shù)據(jù)庫的DML操作的回滾。這個(gè)工具通過解析binlog日志,幫助用戶高效、方便地進(jìn)行數(shù)據(jù)恢復(fù)。MyFlash的優(yōu)勢(shì)在于它提供了更多的過濾選項(xiàng),使得回滾操作變得更加容易。與其他數(shù)據(jù)恢復(fù)工具相比,MyFlash無需將binlog解析成文本再進(jìn)行轉(zhuǎn)換,而是提供了基于庫、表、SQL類型、位置、時(shí)間等多種過濾方式。

GitHub 地址如下:

https://github.com/Meituan-Dianping/MyFlash

本文將實(shí)驗(yàn)通過 MyFlash 工具快速恢復(fù)誤刪除 或 誤修改的數(shù)據(jù)。

注意:要使用 MyFlash ,前提需要將 MySQLbinlog格式改為row,且 binlog_row_image=full,所以在下面實(shí)驗(yàn)前,請(qǐng)確保 MySQL 開啟了 binlog ,并且 binlog 的格式正確:

show variables like 'log_bin';

在這里插入圖片描述

SHOW VARIABLES LIKE 'binlog_row_image';

在這里插入圖片描述

二、MyFlash 部署

安裝依賴環(huán)境:

yum install gcc glib2-devel -y

下載 MyFlash 項(xiàng)目:

wget https://github.com/Meituan-Dianping/MyFlash/archive/master.zip

解壓:

unzip master.zip

編譯源文件:

cd MyFlash-master
gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback

查看 flashback 命令:

./binary/flashback -h

在這里插入圖片描述

解釋如下:

  • databaseNames:指定需要回滾的數(shù)據(jù)庫名。多個(gè)數(shù)據(jù)庫可以用 , 隔開。如果不指定該參數(shù),相當(dāng)于指定了所有數(shù)據(jù)庫。
  • tableNames:指定需要回滾的表名。多個(gè)表可以用 , 隔開。如果不指定該參數(shù),相當(dāng)于指定了所有表。
  • start-position:指定回滾開始的位置。如不指定,從文件的開始處回滾。請(qǐng)指定正確的有效的位置,否則無法回滾。
  • stop-position:指定回滾結(jié)束的位置。如不指定,回滾到文件結(jié)尾。請(qǐng)指定正確的有效的位置,否則無法回滾。
  • start-datetime:指定回滾的開始時(shí)間。注意格式必須是 %Y-%m-%d %H:%M:%S。如不指定,則不限定時(shí)間。
  • stop-datetime:指定回滾的結(jié)束時(shí)間。注意格式必須是 %Y-%m-%d %H:%M:%S。如不指定,則不限定時(shí)間。
  • sqlTypes:指定需要回滾的 sql 類型。目前支持的過濾類型是 INSERT, UPDATE, DELETE。多個(gè)類型可以用 , 隔開。
  • maxSplitSize:指定解析分割后文件最大大小,單位為 M
  • binlogFileNames:指定需要回滾的 binlog 文件,如有多個(gè),用 , 隔開。
  • outBinlogFileNameBase:指定輸出的 binlog 文件前綴,如不指定,則默認(rèn)為 binlog_output_base.flashback。
  • logLevel:指定輸出的日志級(jí)別,可選級(jí)別有 debug, warning, error,默認(rèn)級(jí)別為 error 級(jí)別。
  • include-gtids:指定需要回滾的 gtid,支持 gtid 的單個(gè)和范圍兩種形式,如有多種形式,用 , 隔開。
  • exclude-gtids:指定不需要回滾的 gtid,支持 gtid 的單個(gè)和范圍兩種形式,如有多種形式,用 , 隔開。

三、測(cè)試環(huán)境構(gòu)建

創(chuàng)建測(cè)試庫:

create database testdb;
use testdb;

創(chuàng)建測(cè)試表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

寫入測(cè)試數(shù)據(jù):

INSERT INTO `testdb`.`user` (`id`, `name`, `age`) VALUES (1, '張三', 16);
INSERT INTO `testdb`.`user` (`id`, `name`, `age`) VALUES (2, '趙六', 17);
INSERT INTO `testdb`.`user` (`id`, `name`, `age`) VALUES (3, '李四', 18);
INSERT INTO `testdb`.`user` (`id`, `name`, `age`) VALUES (4, '小明', 19);
INSERT INTO `testdb`.`user` (`id`, `name`, `age`) VALUES (5, '小李', 20);

四、數(shù)據(jù)誤刪除恢復(fù)

假設(shè)不小心刪除了 age > 17 的數(shù)據(jù):

delete from user where age > 17;

在這里插入圖片描述

查看當(dāng)前 binlog 名稱:

show master status;

在這里插入圖片描述

先生成一個(gè)新的 binlog 文件,讓后面的操作記錄在新的 binlog 文件中:

flush logs;

在這里插入圖片描述

使用 MyFlash 反向解析剛才的 mysql-bin.000004 文件,這個(gè)可以根據(jù)時(shí)間范圍定位,sqlTypesDELETE 類型:

./binary/flashback --databaseNames="testdb" --tableNames="user" --start-datetime="2024-06-15 14:35:30" --stop-datetime="2024-06-15 14:41:30" --sqlTypes="DELETE" --binlogFileNames=/var/lib/mysql/mysql-bin.000004 --outBinlogFileNameBase=user.sql

在這里插入圖片描述

執(zhí)行后可以看到生成了一個(gè) user.sql.flashback 回滾文件,可以使用 mysqlbinlog 進(jìn)行查看:

mysqlbinlog -vv user.sql.flashback 

在這里插入圖片描述

可以看出內(nèi)容是 INSERT 操作,用來恢復(fù)之前誤刪除的數(shù)據(jù),下面可以直接使用 mysqlbinlog 去執(zhí)行其中的內(nèi)容:

mysqlbinlog user.sql.flashback | mysql -uroot -proot

在這里插入圖片描述

下面查看數(shù)據(jù)是否被恢復(fù):

在這里插入圖片描述

數(shù)據(jù)成功恢復(fù)!

五、數(shù)據(jù)誤修改恢復(fù)

假設(shè)修改數(shù)據(jù)時(shí)忘了加 where 條件,導(dǎo)致所有數(shù)據(jù)都被誤修改:

update user set age = 99;

在這里插入圖片描述

下面做法和上面相似,首先查看當(dāng)前 binlog 名稱:

show master status;

在這里插入圖片描述

同樣生成一個(gè)新的 binlog 文件,讓后面的操作記錄在新的 binlog 文件中:

flush logs;

在這里插入圖片描述

使用 MyFlash 反向解析剛才的 mysql-bin.000005 文件,這個(gè)還是根據(jù)時(shí)間范圍定位,sqlTypes 要改為 UPDATE 類型:

./binary/flashback --databaseNames="testdb" --tableNames="user" --start-datetime="2024-06-15 14:45:30" --stop-datetime="2024-06-15 14:50:30" --sqlTypes="UPDATE" --binlogFileNames=/var/lib/mysql/mysql-bin.000005 --outBinlogFileNameBase=user1.sql

在這里插入圖片描述

執(zhí)行后可以看到生成了一個(gè) user1.sql.flashback 回滾文件,使用 mysqlbinlog 進(jìn)行查看:

mysqlbinlog -vv user1.sql.flashback 

在這里插入圖片描述

可以看出是 UPDATE 操作,用來恢復(fù)之前誤修改的數(shù)據(jù),同樣直接使用 mysqlbinlog 去執(zhí)行其中的內(nèi)容:

mysqlbinlog user1.sql.flashback | mysql -uroot -proot

在這里插入圖片描述

下面查看數(shù)據(jù)是否恢復(fù):

在這里插入圖片描述

數(shù)據(jù)成功恢復(fù)!

以上就是MySQL使用MyFlash快速恢復(fù)誤刪除和修改的數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于MySQL MyFlash恢復(fù)誤刪除數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論