mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据
傳統(tǒng)解法
用全量備份重搭實(shí)例,再利用增量binlog備份,恢復(fù)到誤操作之前的狀態(tài)。然后跳過誤操作的SQL,再繼續(xù)應(yīng)用binlog。此法費(fèi)時(shí)費(fèi)力,不值得再推薦。
利用binlog2sql快速閃回
首先,確認(rèn)你的MySQL server開啟了binlog,設(shè)置了以下參數(shù):
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
max_binlog_size=1000M
binlog-format=row
如果沒有開啟binlog,也沒有預(yù)先生成回滾SQL,那真的無法快速恢復(fù)數(shù)據(jù)了。對(duì)存放重要業(yè)務(wù)數(shù)據(jù)的MySQL,強(qiáng)烈建議開啟binlog。
隨后,安裝開源工具binlog2sql。binlog2sql是一款簡(jiǎn)單易用的binlog解析工具,其中一個(gè)功能就是利用binlog進(jìn)行閃回。
gitclonehttps://github.com/danfengcao/binlog2sql.git
pipinstall-rrequirements.txt
然后,我們就可以生成回滾SQL了。
背景:誤刪了test庫tbl表整張表的數(shù)據(jù),需要緊急回滾。
test庫tbl表原有數(shù)據(jù)
mysql>select*fromtbl;
+----+--------+---------------------+
|id|name|addtime|
+----+--------+---------------------+
|1|小趙|2016-12-1000:04:33|
|2|小錢|2016-12-1000:04:48|
|3|小孫|2016-12-1000:04:51|
|4|小李|2016-12-1000:04:56|
+----+--------+---------------------+
4rowsinset(0.00sec)
mysql>deletefromtbl;
QueryOK,4rowsaffected(0.00sec)
tbl表被清空
mysql>select*fromtbl;
Emptyset(0.00sec)
恢復(fù)數(shù)據(jù)步驟:
登錄mysql,查看目前的binlog文件
mysql>showmaster logs;
+------------------+-----------+
|Log_name|File_size|
+------------------+-----------+
|mysql-bin.000046|12262268|
|mysql-bin.000047|3583|
+------------------+-----------+
最新的binlog文件是mysql-bin.000047,我們?cè)俣ㄎ徽`操作SQL的binlog位置
$pythonbinlog2sql/binlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'
輸出:
DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:33'AND`id`=1AND`name`='小趙'LIMIT1;#start 3346 end 3556
DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:48'AND`id`=2AND`name`='小錢'LIMIT1;#start 3346 end 3556
DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:51'AND`id`=3AND`name`='小孫'LIMIT1;#start 3346 end 3556
DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:56'AND`id`=4AND`name`='小李'LIMIT1;#start 3346 end 3556
生成回滾sql,并檢查回滾sql是否正確
$pythonbinlog2sql/binlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'--start-pos=3346--end-pos=3556-B
輸出:
INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:56',4,'小李');#start 3346 end 3556
INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:51',3,'小孫');#start 3346 end 3556
INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:48',2,'小錢');#start 3346 end 3556
INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:33',1,'小趙');#start 3346 end 3556
確認(rèn)回滾sql正確,執(zhí)行回滾語句。登錄mysql確認(rèn),數(shù)據(jù)回滾成功。
$pythonbinlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'--start-pos=3346--end-pos=3556-B|mysql-h127.0.0.1-P3306-uadmin-p'admin'
mysql>select*fromtbl;
+----+--------+---------------------+
|id|name|addtime|
+----+--------+---------------------+
|1|小趙|2016-12-1000:04:33|
|2|小錢|2016-12-1000:04:48|
|3|小孫|2016-12-1000:04:51|
|4|小李|2016-12-1000:04:56|
+----+--------+---------------------+
軟件測(cè)試免費(fèi)視頻觀看鏈接:https://ke.qq.com/course/159919#tuin=ba4122
松勤網(wǎng):www.songqinnet.com
總結(jié)
以上是生活随笔為你收集整理的mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乐高字体logo教程
- 下一篇: mysql使用索引下推的好处_mysql