hhyo / Archery

SQL 审核查询平台
https://archerydms.com
Apache License 2.0
6.11k stars 1.69k forks source link

工单的回滚SQL,建议用my2sql生成 #1510

Closed xuanzhi201111 closed 2 years ago

xuanzhi201111 commented 2 years ago

使用binlog2sql生成的回滚SQL,它是包括了所有字段的值,但如果我在工单里,只修改了两个字段 a1 b1字段 ,这个时候我同事修改了 c1 d1字段 ,这个时候我想回滚我自己的修改,就会把我同事的修改也回滚掉了,但如果用my2sql的话,修改了什么字段,相对应回滚的就是什么字段的值,这样是最好的。避免了把别人的变更也回滚了。

nick2wang commented 2 years ago

binlog2sql默认是输出全列数据,而my2sql默认是修改列(使用-full-columns就是全列模式了)

xuanzhi201111 commented 2 years ago

如果提交的变更工单里,使用的my2sql,生成修改列回滚才是绝大多人想要的吧,别的字段没变更,回滚的时候为什么要全部set一次呢 ,所以我个人建议工单里的回滚,能不能换成my2sql,而不是用binlog2sql呢,因为binlog2sql生成所有列的数据,会把别人修改的 也回滚掉了,很危险的,感觉不合理,如果这些数据没有二次修改 ,通过binlog2sql回滚肯定没有问题的,但这种被二次修改的可能还是有的。

xuanzhi201111 commented 2 years ago

例如我工单里,修改 id为1这条数据对应的 a、 b字段的值,最理想的是用my2sql生成修改列的回滚语句

目前的是这样的: id a b c d 1 1 1 1 1 2 2 2 2 2

  1. 我修改了 a b的值 ,如果按目前archery工单里生成的回滚语句是 包括了 id a b c d字段 2 . 这个时候我同事修改了 c d字段
  2. 我发现我修改的 a b有问题,需要回滚,这个时候会回滚 id a b c d的值
  3. 我同事的修改就会被我的回滚掉了,正常情况下不需要回滚 c d的
nick2wang commented 2 years ago

工单回滚sql是通过goinception实现的,binlog2sql只是一个手动辅助工具

hhyo commented 2 years ago

https://hanchuanchuan.github.io/goInception/zh/options.html#variables

开启参数 enable_minimal_rollback