Mycat2
的官方文档:https://www.yuque.com/ccazhw/ml3nkf/fb2285b811138a442eb850f0127d7ea3
- Mycat2的使用
Mycat是数据库的中间件,启动Mycat之后,可像使用Mysql一样使用Mycat。可以像链接mysql一样通过jdbc链接mycat。链接Mycat之后所有分库分表的逻辑都被Mycat封装,使用起来比较简单。
在使用之前需要配置Mycat,这个过程相对比较复杂。需要的步骤大概是:配置数据源,配置句群,创建分库分表规则(可以使用一些默认规则),创建表单。
通过以上步骤之后,可以像使用Mysql一样使用Mycat的分库分表功能。
- 配置过程中遇到的问题
- 启动报错
在MAC是获取到运行包之后,在bin目录下执行命令 ./mycat start, 报权限问题,对整个运行文件夹执行 chmod 777, 赋权之后可以正常运行。 - 使用命令行登录Mycat
命令行mysql -u root -P 8066 一直登录到3306,目前还无法登录 - 使用WorkBench客户端登录Mycat
可以登录,登录后无法执行Mycat的注解命令。无法执行分库分表的创建语句。 - 使用Navicat客户端登录
付费客户端,目前可以使用 - 使用官方UI登录
下载地址 http://dl.mycat.org.cn/2.0/ui/ ,有Bug不好用 - 分库分表之后ID自增问题
id自增,发现并不是顺序自增 - 设置远程数据源启动报错
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'@'%';
- 集群中从库没有创建表
看到集群从库配置,以为会有两套库,如会有两套2库4表的配置生成,但是并没有,Mycat配置的集群从库,不会创建一套库只是添加配置。 - 分库分表规则
dbpartition by mod_hash(id) tbpartition by mod_hash(id)
按照id取模后分库分表,存取问题解决