mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据
傳統解法
用全量備份重搭實例,再利用增量binlog備份,恢復到誤操作之前的狀態。然后跳過誤操作的SQL,再繼續應用binlog。此法費時費力,不值得再推薦。
利用binlog2sql快速閃回
首先,確認你的MySQL server開啟了binlog,設置了以下參數:
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
max_binlog_size=1000M
binlog-format=row
如果沒有開啟binlog,也沒有預先生成回滾SQL,那真的無法快速恢復數據了。對存放重要業務數據的MySQL,強烈建議開啟binlog。
隨后,安裝開源工具binlog2sql。binlog2sql是一款簡單易用的binlog解析工具,其中一個功能就是利用binlog進行閃回。
gitclonehttps://github.com/danfengcao/binlog2sql.git
pipinstall-rrequirements.txt
然后,我們就可以生成回滾SQL了。
背景:誤刪了test庫tbl表整張表的數據,需要緊急回滾。
test庫tbl表原有數據
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)
恢復數據步驟:
登錄mysql,查看目前的binlog文件
mysql>showmaster logs;
+------------------+-----------+
|Log_name|File_size|
+------------------+-----------+
|mysql-bin.000046|12262268|
|mysql-bin.000047|3583|
+------------------+-----------+
最新的binlog文件是mysql-bin.000047,我們再定位誤操作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
確認回滾sql正確,執行回滾語句。登錄mysql確認,數據回滾成功。
$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|
+----+--------+---------------------+
軟件測試免費視頻觀看鏈接:https://ke.qq.com/course/159919#tuin=ba4122
松勤網:www.songqinnet.com
總結
以上是生活随笔為你收集整理的mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乐高字体logo教程
- 下一篇: mysql使用索引下推的好处_mysql