拿一個已經(jīng)生成的binlog文件感混,用來恢復(fù)數(shù)據(jù)庫被刪除數(shù)據(jù),可用以下方法:
1、創(chuàng)建一個新的數(shù)據(jù)庫蓄氧,名稱要和原來數(shù)據(jù)庫名稱一樣
? ? create database db;
2、導(dǎo)入原來數(shù)據(jù)庫表結(jié)構(gòu)
? ? use db;
? ? set names utf8;
? ? source /opt/table.sql;
3、解析binlog文件,把數(shù)據(jù)解析成一個可用文本工具(比如:UE)閱讀的文件內(nèi)容
? ??mysqlbinlog --base64-output=decode-rows -v mysql-bin.001636 > mysqllog.sql
? ? 然后在這個mysqllog.sql文件中用關(guān)鍵字(比如:數(shù)據(jù)庫id或其它唯一標識字段)查找尺棋,找到對應(yīng)刪除SQL語句位置瓮床,類似下面這樣的:
? ? 這里能看到刪除時間是2021-06-23 12:21:12,我們只需要把數(shù)據(jù)恢復(fù)到這個時間之前募谎,下面開始恢復(fù)。
4、設(shè)置GTID模式
? ? 登錄到mysql控制臺咽白,執(zhí)行以下命令:
? ? # 設(shè)置GTID為? ?OFF_PERMISSIVE 模式
????set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;?
5、恢復(fù)數(shù)據(jù)
? ? mysqlbinlog --skip-gtids=true --start-datetime="2011-06-03 00:03:23" --stop-datetime="2011-06-07 23:06:44" mysql-bin.001636 | mysql -f -u root -p db
? ??--skip-gtids=true鸟缕,恢復(fù)過一次數(shù)據(jù)晶框,mysql會記錄GTID信息。如果不加此參數(shù)叁扫,下一次將無法恢復(fù)數(shù)據(jù)三妈;可選;
? ??--start-datetime莫绣,從哪個時間點開始恢復(fù)數(shù)據(jù)畴蒲,可選;
? ??--stop-datetime对室,在哪個時間點結(jié)束恢復(fù)數(shù)據(jù)模燥,可選咖祭;在第3點所說的,查找到刪除數(shù)據(jù)時間點后蔫骂,帶上此參數(shù)填入刪除數(shù)據(jù)之前的時間點么翰;
? ? mysql -f -u root -p db,-f 表示強制恢復(fù)辽旋,跳過報錯浩嫌; db? 表示要恢復(fù)到數(shù)據(jù)庫;