当前位置: 首页 > 工具软件 > Mycat2 > 使用案例 >

Mycat2入门

蓟和煦
2023-12-01

Mycat2
的官方文档:https://www.yuque.com/ccazhw/ml3nkf/fb2285b811138a442eb850f0127d7ea3

  • Mycat2的使用

Mycat是数据库的中间件,启动Mycat之后,可像使用Mysql一样使用Mycat。可以像链接mysql一样通过jdbc链接mycat。链接Mycat之后所有分库分表的逻辑都被Mycat封装,使用起来比较简单。
在使用之前需要配置Mycat,这个过程相对比较复杂。需要的步骤大概是:配置数据源,配置句群,创建分库分表规则(可以使用一些默认规则),创建表单。
通过以上步骤之后,可以像使用Mysql一样使用Mycat的分库分表功能。

  • 配置过程中遇到的问题
  1. 启动报错
    在MAC是获取到运行包之后,在bin目录下执行命令 ./mycat start, 报权限问题,对整个运行文件夹执行 chmod 777, 赋权之后可以正常运行。
  2. 使用命令行登录Mycat
    命令行mysql -u root -P 8066 一直登录到3306,目前还无法登录
  3. 使用WorkBench客户端登录Mycat
    可以登录,登录后无法执行Mycat的注解命令。无法执行分库分表的创建语句。
  4. 使用Navicat客户端登录
    付费客户端,目前可以使用
  5. 使用官方UI登录
    下载地址 http://dl.mycat.org.cn/2.0/ui/ ,有Bug不好用
  6. 分库分表之后ID自增问题
    id自增,发现并不是顺序自增
  7. 设置远程数据源启动报错
INFO   | jvm 1    | 2021/08/20 16:56:53 | Caused by: java.sql.SQLException: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at com.alibaba.druid.util.JdbcUtils.executeQuery(JdbcUtils.java:782)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at cn.mycat.vertx.xa.impl.XaLogImpl.readXARecoveryLog(XaLogImpl.java:208)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at cn.mycat.vertx.xa.impl.XaLogImpl.readXARecoveryLog(XaLogImpl.java:190)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.config.ConfigPrepareExecuter.commit(ConfigPrepareExecuter.java:388)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.config.FileMetadataStorageManager.commitAndSyncDisk(FileMetadataStorageManager.java:346)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.config.FileMetadataStorageManager$1.commit(FileMetadataStorageManager.java:250)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.config.MycatRouterConfigOps.commit(MycatRouterConfigOps.java:495)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.sqlhandler.dql.HintHandler.mycatDmlHandler(HintHandler.java:955)
INFO   | jvm 1    | 2021/08/20 16:56:53 | 	at io.mycat.sqlhandler.dql.HintHandler.onExecute(HintHandler.java:584)

报错原因:mysql用户没有xa权限
解决方式:

GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'%';
  1. 集群中从库没有创建表
    看到集群从库配置,以为会有两套库,如会有两套2库4表的配置生成,但是并没有,Mycat配置的集群从库,不会创建一套库只是添加配置。
  2. 分库分表规则
    dbpartition by mod_hash(id) tbpartition by mod_hash(id)
    按照id取模后分库分表,存取问题解决
 类似资料: