复制类型

基于语句的复制statement
基于行的复制row
混合类型的复制mixed

mycat2发往后端的MYSQL的SQL总是带有库名的,在作为从的mysql在接收到binlog后,复制类型statement的binlog会根据use db;的状态(上下文),来进行选择同步执行库下的数据,所以如果执行库与sql中的库名不同,从库在接收到statement binlog的时候,不会apply该binlog.所以建议生产上使用row进行同步.

切换执行库的语句是

  1. use mysql;

由于教程中的数据源的jdbc url中的执行库写了mysql,执行库其实就是use mysql中的mysql,在statement 同步下,那就是同步mysql下的数据,忽略其他库,即使sql中带有其他库名.也会影响到statement类型不能apply binlog.
所以jdbc url中的库名请写上业务库,该业务库要与物理分库对应

而mysql的配置中,以下设置会导致忽略对应的默认库,如果发现从库没有同步主库数据,请仔细检查

  1. #主节点检查
  2. binlog_do_db
  3. binlog_ignore_db
  4. #从节点检查
  5. Replicate_Do_DB
  6. Replicate_Ignore_DB

番茄
如果同步方式为statement方式,建议执行库配置与执行sql的涉及库一致,避免同步配置忽略执行库导致binlog不能apply
row模式下,忽略库,DDL也会不同步