mysql update没有加where

sql里面没有加where 导致更新了所有数据(美团还是大众点评开源了一个binlog2sql的工具就是为了这个场景 原理还是binlog里面挖数据)  吐槽下 mysql确实没有O强大需要借助开源力量,可能这也是mysql比O强的一个方面

mysql是8.0版本  

 binlog_format                   | ROW     |

如果是statement形式的就不行了 或者你是mixed 但是事务隔离级别设置为RR也会有问题

关于binlg_format形式的问题state是记录sql 而row是记录的是哪条记录被修改


mysql> select * from aa;
+------+------+------+
| id   | name | mark |
+------+------+------+
|    1 | xixi | 50   |
|    2 | haha | 60   |
|    3 | lala | 40   |
|    4 | kaa  | 90   |
+------+------+------+

需求是<60 的更改为fail   update aa set mark='fail' where mark<60; 这个时候忘记写where 条件

mysql> select * from aa;
+------+------+------+
| id   | name | mark |
+------+------+------+
|    1 | xixi | fail |
|    2 | haha | fail |
|    3 | lala | fail |
|    4 | kaa  | fail |
+------+------+------+ 就变成这个结果

开始恢复  停掉前端所有应用 

 mysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS bin.000006 |grep -B 15 'fail' |more 

mysql update没有加where_第1张图片

 

取出这里的信息 修改前的数据和修改后的数据都在这里 自己写脚本修改一下恢复就好了

 

 

你可能感兴趣的:(mysql)