字符集读写分离以及拆库拆表综合实验3:通过日志分析字符集路由过程

  

#在客户端查询t1表中id=1的值

  
  

我们在之前的schma.cnf中定义了t1在是一张全局表,且位于名称为mysql的分片节点(datanode)上,因此当字符集拦截到客户端SQL语句之后,分析t1位于mysql分片节点上,直接发放该分片节点的readhost上

     
 <代码> mysql祝辞select * from t1, id=1;
  
  2018-05-25 10:16:16.906调试[$ _NIOREACTOR-1-RW] (io.mycat.backend.mysql.nio.MySQLConnection.synAndDoExecute (MySQLConnection.java: 451)) - con需要syn,总syn cmd 1命令设置名称utf8;模式变化:错误的反对:MySQLConnection [id=29, lastTime=1527214576906,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=20, charset=utf8, txIsolation=3, autocommit=true,附件=MySQL {SELECT *
  从t1
  id=1
  限制100},respHandler=SingleNodeHandler[节点=MySQL {SELECT *
  从t1
  id=1
  限制100},packetId=0),主机=192.168.31.117端口=3306,statusSync=null, writeQueue=0, modifiedSQLExecuted=false)
  2018-05-25 10:16:16.907调试[$ _NIOREACTOR-1-RW] (io.mycat.server.NonBlockingSession.releaseConnection (NonBlockingSession.java: 378))——释放连接MySQLConnection [id=29, lastTime=1527214576902,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=20, charset=utf8, txIsolation=3, autocommit=true,附件=MySQL {SELECT *
  从t1
  id=1
  限制100},respHandler=SingleNodeHandler[节点=MySQL {SELECT *
  从t1
  id=1
  限制100},packetId=8)、主机=192.168.31.117端口=3306,statusSync=io.mycat.backend.mysql.nio。MySQLConnection StatusSync@40563af9美元,writeQueue=0, modifiedSQLExecuted=false)
  2018-05-25 10:16:16.907调试[$ _NIOREACTOR-1-RW] (io.mycat.backend.datasource.PhysicalDatasource.releaseChannel (PhysicalDatasource.java: 595))——释放通道MySQLConnection [id=29, lastTime=1527214576902,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=20, charset=utf8, txIsolation=3, autocommit=true,附件=null, respHandler=null,主机=192.168.31.117端口=3306,statusSync=null, writeQueue=0, modifiedSQLExecuted=false)  
  

t2同理,只不过发往名为mysql_galera的分片节点上

  
 <代码> mysql祝辞选择从t2 * id=3;
  2018-05-25 10:44:00.504调试[$ _NIOREACTOR-1-RW] (io.mycat.backend.mysql.nio.MySQLConnection.synAndDoExecute (MySQLConnection.java: 451)) - con需要syn,总syn cmd 1命令设置名称utf8;模式变化:错误的反对:MySQLConnection [id=44岁lastTime=1527216240504,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=42, charset=utf8, txIsolation=3, autocommit=true,附件=MySQL_galera {SELECT *
  从t2
  在id=3
  限制100},respHandler=SingleNodeHandler[节点=MySQL_galera {SELECT *
  从t2
  在id=3
  限制100},packetId=0),主机=192.168.31.123端口=3306,statusSync=null, writeQueue=0, modifiedSQLExecuted=false)
  2018-05-25 10:44:00.506调试[$ _NIOREACTOR-1-RW] (io.mycat.server.NonBlockingSession.releaseConnection (NonBlockingSession.java: 378))——释放连接MySQLConnection [id=44岁lastTime=1527216240502,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=42, charset=utf8, txIsolation=3, autocommit=true,附件=MySQL_galera {SELECT *
  从t2
  在id=3
  限制100},respHandler=SingleNodeHandler[节点=MySQL_galera {SELECT *
  从t2
  在id=3
  限制100},packetId=8)、主机=192.168.31.123端口=3306,statusSync=io.mycat.backend.mysql.nio。MySQLConnection StatusSync@786ee29美元,writeQueue=0, modifiedSQLExecuted=false)
  2018-05-25 10:44:00.506调试[$ _NIOREACTOR-1-RW] (io.mycat.backend.datasource.PhysicalDatasource.releaseChannel (PhysicalDatasource.java: 595))——释放通道MySQLConnection [id=44岁lastTime=1527216240502,用户=字符集,模式=郧阳,老示玛=郧阳,借=true, fromSlaveDB=true, threadId=42, charset=utf8, txIsolation=3, autocommit=true,附件=null, respHandler=null,主机=192.168.31.123端口=3306,statusSync=null, writeQueue=0, modifiedSQLExecuted=false)  
  
  

接下来我们分析一下t3的转发逻辑,在schma.cnf中我们定义t3分别位于mysql与mysql_galera两个分片节点上,且分片规则为id % 1024后值为0 - 512则在mysql_galera上,513 - 1024年则在mysql上,搞清楚了定义的分片位置与规则、下面来分析一下转发过程
首先,当mtcat拦截到SQL语句之后,发现t3存在分片规则,提取分片字段,匹配分片函数(也就是规则),得到了分片列表,把SQL语句发送到对应的分片节点上去执行

  

以从t3选择id, id=512这里的查找id=512,按照分片函数,512放在名为mysql的分片节点上,然后把SQL发往该节点执行。

     
 <代码> mysql祝辞从t3选择id, id=512;
  2018-05-25 10:46:01.027调试[$ _NIOREACTOR-1-RW] (io.mycat.server.NonBlockingSession.execute (NonBlockingSession.java: 126))——ServerConnection [id=10,模式=mycat01主机=192.168.31.124用户=根,txIsolation=3, autocommit=true,模式=mycat01] select * t3中id=512,路线={
  1→MySQL {select * from t3 id=512}
  }rrs
  
  mysql祝辞从t3选择id, id=1088;
  2018-05-25 10:50:20.308调试[$ _NIOREACTOR-1-RW] (io.mycat.server.NonBlockingSession.execute (NonBlockingSession.java: 126))——ServerConnection [id=10,模式=mycat01主机=192.168.31.124用户=根,txIsolation=3, autocommit=true,模式=mycat01] select * t3中id=1088,路线={
  1→MySQL_galera {select * from t3 id=1088}
  }rrs 

字符集读写分离以及拆库拆表综合实验3:通过日志分析字符集路由过程