搞程序10年了。第一次遇到这种情况,蒙了更新的数据,其中一部分间隔6小时之后,竟然没了。环境
        阿里云
     系统  centos   6.5          64位
 数据库  mysql    5.6.24    64位
 表引擎  myisam      情况是这样的。运营人员在后台更新了用户的ID 。期间一共更新了10多个。其中有3个,第三天的时候发现没了。
      用户数据一共3张表,没有主外键关联也没有触发器,三张表的用户数据同时消失。用户的登陆记录、邮件记录,物品记录,都存在。
      仔细核查。对用户最后一个操作在添加后的6消失内。以此证明用户在更新后,6小时内是存在数据库了。     初步判断,1、是否业务逻辑有删除。2、是否有sql注入删除     查询mysql 的日志。 对该用户的操作日志都能找出,但是找不到delete语句。 以此排除以上2种问题。    难道会莫名随机消失吗。10多条更新。都是单个单个用户更新。每次更新用户的3张表。如果有问题。为什么只消失了其中3条?
   还想过是否阿里云回档问题。判断应该不会,如果回档,应该掉一个时间段的数据,但是。此时间段的其他数据都还在。
    
   大牛们遇到这种情况没。能否解答,谢谢!
      

解决方案 »

  1.   

    没开启mysqlbinlog吗 解析出来分析
      

  2.   


    就是看的binlog    对这3个用户的所有MYSQL语句。更新,查询。还有日志记录,这些SQL操作都查的到,就是没有删除记录。关键问题。3张表没有建立关联,为什么3张表的数据同时都没有了
    主表的ID是自增长。但是程序逻辑直接插入的ID。也看了很多资料MYISAM引擎,是表锁定。这个更新自动增长ID是没问题的啊。
    也不会影响其他3张表啊。而且,更新后,已知6个小时,数据是存在的。因为有对用户的操作。把我搞蒙了
      

  3.   

    SUPPER 的操作可以不记 BINLOG 的,所以不排除人为操作导致
    如果是复制导致的,则默认复制操作也是不记 binlog 的
    建议开 general_log 看下 sql 操作
      

  4.   


    现在数据库没有进行复制每天会产生2G多的binlog数据
    不知道开general_log 每天会产生多少数据?好计算空间
      

  5.   


    第二条。数据库没触发器。程序的话。应该是不太可能。程序走的都是binlog 还有在分析器里面执行的语句,都会走binlog。对于SUPER这个要开general_log  这个要核算一下空间。然后等待重现第三条。查过了。不可能,因为用户昵称和用户名都没更新过的。如果有更新到别的,那么binlog里面也是会有记录的。程序所有的操作都会记录binlog
      

  6.   

    赶紧加个触发器, 数据有删除操作的直接插入到另外一张表B去, 而且表B多一个 execTime , 也就是执行时间。 这样你至少:
    1. 不会丢数据;
    2. 判断到底什么时候出了类似的问题。
      

  7.   

    建议还是好好分析binglog的操作记录   这个是记录数据库所有更新操作的
    你的binlog是如何分析查找的
    另外看看数据库是否重启过
      

  8.   

    肯定是有什么脚本或者sql执行了