• mysql mycat 1.6.6.1-release 批量 insert 数据丢失问题(续)


    我在项目中使用mycat进行分表,分了20个表,然后发现偶尔会出现分批次insert数据丢失问题。
    比如从日志发现一共17020条记录,分批每次1000条insert入库,最后只insert成功了13020条。看了java的日志和mycat的日志没有发现任何error。

    而且我查看了mybatis 的debug日志  ,除了第5个批量Insert 1000条  打印的      2020-01-10 14:13:40.325 http-nio-9080-exec-3 DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159) - <==    Updates: 1

    其他地方都是正常打印的 Updates: 1000      2020-01-10 14:13:39.116 http-nio-9080-exec-3 DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159) - <==    Updates: 1000

    而且我查了数据发现前面4000条数据丢失了,也就是说打印   <==    Updates: 1 之前的4次分批1000条insert都丢失了,java和mycat没有任何报错。

    这个问题困扰了我很久,可以看我之前写的2个文章也是解决这个问题的,但是都没有完全解决,小概率还是会发生丢失数据问题。我猜测要么是mycat的问题或者就是spring 的事务没有配置正确。

    https://www.cnblogs.com/xiaohanlin/p/11850508.html

    https://www.cnblogs.com/xiaohanlin/p/11492715.html

    然后我在mycat的github issues 里面提了这个问题,很快就得到了回复。建议我把mycat的dbDriver="jdbc"  试试,我的配置如下

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="jdbc" switchType="-1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>

    <writeHost host="Master1" url="jdbc:mysql://15.31.213.44:3306/nova?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true" user="root"
    password="123456">

    </writeHost>

    (注意:从  dbDriver="nvative"改成  dbDriver="jdbc"   后 allowMultiQueries=true 需要加在mycat和微服务的jdbc参数里面,不然批量update执行报错) 

    然后我把每个微服务的数据库配置也修改成了

     url: jdbc:mysql://15.31.213.44:8066/nova?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true

    然后需要再观察一段时间会不会再出现丢失数据的这个问题。

    2020-01-17

    在线上环境发现一个bug:从odm发给hp进行send task config review的CTP-TASK0000000059 在hp端打了一些np进行save的时候发现有些np没生效。但是不是每次都能复现出来

    小概率会出现。

    我查看了java的日志中的mybatis的debug打印日志,发现没有任何报错,先删除struct表9258条数据,然后分10次一共9258条数据批量insert打印都是成功的   Updates: 1000

    然后我查看了mycat的mycat.log日志从 2020-01-17 09:36:46.189  开始就有如下日志(上面所说的insert完成9258条数据是在09:36:59     到09:37:04左右结束的)

    2020-01-17 09:36:46.189 INFO [Timer1] (io.mycat.backend.datasource.PhysicalDatasource.closeByIdleMany(PhysicalDatasource.java:337)) - too many ilde cons ,close some for datasouce Master1
    2020-01-17 09:36:46.189 INFO [Timer1] (io.mycat.net.AbstractConnection.close(AbstractConnection.java:520)) - close connection,reason:too many idle con ,MySQLConnection [id=14812, lastTime=1579224996188, user=root, schema=nova, old shema=nova, borrowed=false, fromSlaveDB=false, threadId=65605, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=15.32.134.247, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

    而且mycat.log日志中有很多  close connection,reason:quit cmd的日志,如下所示

    2020-01-17 09:36:59.122 INFO [$_NIOREACTOR-29-RW] (io.mycat.net.AbstractConnection.close(AbstractConnection.java:520)) - close connection,reason:quit cmd ,ServerConnection [id=92542, schema=nova, host=15.32.134.247, user=root,txIsolation=3, autocommit=true, schema=nova, executeSql=null]

    然后我看了一下 44 的trialrun环境上面的mycat的日志由于我把改成了dbDriver="jdbc"  发现很少有上述的 close connection,reason:quit cmd的日志 或者几乎没有

    后续再观察一下是不是改成dbDriver="jdbc"  就解决这个问题了。

  • 相关阅读:
    fpga不错的源代码下载地址
    iverilog命令选项解释
    altera官方视频教程下载地址
    niosII EDS和QuartusII安装心得体会
    FPGA的JTAG口很脆弱?
    poj2379
    poj2472
    poj2935
    poj3366
    poj1493
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/12188407.html
Copyright © 2020-2023  润新知