用于无法登录github的用户提交问题或者资料等,该文档无需授权就可以编辑,但是需要语雀账号
1.为什么能在图形化客户端(Navicat,SQlyog)看到表,但是点击后mycat提示表不存在?
因为mycat中没有配置该表,而原型库处理show语句的机制导致图形化客户端显示了没有配置的表
2.如何怎么把已经存在的物理表加载到mycat中?
使用schema配置中的targetName,指向目标数据源或者集群,同时保证schema的名字与目标的库相同,即可自动加载该库已经存在的物理表
3.支持强一致分布式事务吗?
mycat的事务方案没有对存储节点(mysql)有特殊的需求,对于一些事务内跨库的情况,会出现事务数据不一致的情况,比如读不一致.但对于不跨实例(跨库)的情况,比如单库分表,是强一致的.
4.遇到超时报错怎么办?
修改数据源的超时参数
5.支持mysql8吗,支持mysql5.6吗?
都支持,都有用户使用
6.支持ORM吗,比如Spring Data?
支持
7.支持PHP客户端吗?
支持
8.支持存储过程吗?
1.21后开始支持
9.支持物理库中的视图吗?
支持,把它作为单表配置就可以
10.支持跨库join吗?
支持
11.支持golang客户端吗?
支持
12.涉及分片表的时候,发现总是使用一个连接或者使用连接数量偏小,没有并行查询,怎么优化?
调整server.json的mergeUnionSize参数
13.支持物理视图吗?
先把建视图语句以建表语句方式表达,mycat2需要从建表语句中得出字段信息.然后以单表方式配置就可以
- dbNum跟storeNum实际上有什么区别呢,目前都是dbNum=storeNum的,假如dbNum比storeNum多的话,这样就存不了吗?

在自动分区的语义下,dbNum* tableNum 是分区数量
这些分区依次排列在storeNum数量的组上 ,
当dbNum=storeNum,每个数据库的分区数就是tableNum
当dbNum>storeNum,那么一个数据库上面会出现分库分表的情况,分区数大于tableNum
13.无符号值类型被当做有符号值类型?
该问题在涉及单节点查询是不会出现,在多节点查询或者无表sql会出现,因为查询引擎暂时不支持无符号类型
14.mysql官方客户端在使用use schema后卡住了,怎么处理
启动客户端的时候加上-A参数
或者添加-A后缀
use schema -A
15.如何调用mysql上的自定义函数?
a.使用路由注释
b.把函数写在最内层的select查询利就可以,同时该子查询涉及是单表,分片表,全局表
16.mycat2支持配置记录执行的SQL,或者慢查询嘛?
第一种方法使用注释查询慢SQL
/+mycat:showSlowSql/
内置sql记录器,记录大于30s的sql,最近5000条sql
第二种是使用自定义的监控器
SELECT * FROM mycat.sql_log LIMIT 0, 1000;
所需表在这里获取并在原型库创建
https://www.yuque.com/ccazhw/ml3nkf/lb0fbe

https://www.yuque.com/ccazhw/ml3nkf/gwx15x
17.如何动态覆盖分片表配置?
在mycat2里执行通过注释更新配置
/*+ mycat:createTable{"schemaName":"db1","shardingTable":{"createTableSQL":"create table sharding(id int)","function":{"properties":{"dbNum":2,"mappingFormat":"c${targetIndex}/db1_${dbIndex}/sharding_${index}","tableNum":2,"tableMethod":"mod_hash(id)","storeNum":2,"dbMethod":"mod_hash(id)"}},"partition":{"data":[["c0","db1","t2","0","0","0"],["c1","db1","t2","1","1","1"]] }},"tableName":"sharding"} */;
18.如何动态删除表配置?
/*+ mycat:dropTable{"schemaName":"xxx","tableName":"xxx"} */;
19.崩溃调试配置
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR/jvm_dump.log
20.关闭日志中的代码输出
jvm参数添加
calcite.debug = false-Dcalcite.debug = false
21.如何提高吞吐量?
如果数据源是mysql的话,使用native模式,在数据源设置就可以,该模式在1.21-2021-12-17后可以使用.该功能处于实验阶段,该模式不建议在网络环境差的设备环境使用.
22.在分片表中,遇上mysql中有数据,但是mycat中使用select * 无法查询,结果集是0行?
请检查mycat2中配置的分片表建表语句的字段数量,字段类型是否与mysql的物理表相同,另外也要检查涉及的多个mysql的字段是否一致
检查表与数据源集群关系是否对应,找不到集群和数据源也是0行
23.在mycat中执行ddl,比如alter,发现只有主库有执行,从库binlog中有记录但是没有执行,没有同步?
查看mysql中的主从参数是否把mycat中配置的数据源上的默认库过滤了
#主节点检查binlog_do_dbbinlog_ignore_db#从节点检查Replicate_Do_DBReplicate_Ignore_DB
24.
org.apache.calcite.runtime.CalciteContextException: At line 0, column 0: WITHIN GROUP not allowed with group_concat function 用的Navicat 连接工具报错
navicat使用了带group_concat的函数查询虚拟表导致的,mycat不支持group_concat查询虚拟表
可以使用单表映射相关的虚拟表解决这个问题
//information_schema.schema.json{"customTables":{},"globalTables":{},"normalTables":{"ROUTINES":{"createTableSQL":"CREATE TABLE information_schema.ROUTINES (\n\tSPECIFIC_NAME varchar(192),\n\tROUTINE_CATALOG varchar(192),\n\tROUTINE_SCHEMA varchar(192),\n\tROUTINE_NAME varchar(192),\n\tROUTINE_TYPE varchar(27),\n\tDATA_TYPE varchar(1024),\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION bigint(3),\n\tNUMERIC_SCALE bigint(3),\n\tDATETIME_PRECISION bigint(3),\n\tCHARACTER_SET_NAME varchar(12),\n\tCOLLATION_NAME varchar(12),\n\tDTD_IDENTIFIER varchar(255),\n\tROUTINE_BODY varchar(255),\n\tROUTINE_DEFINITION varchar(255),\n\tEXTERNAL_NAME varchar(255),\n\tEXTERNAL_LANGUAGE varchar(255),\n\tPARAMETER_STYLE varchar(255),\n\tIS_DETERMINISTIC varchar(255),\n\tSQL_DATA_ACCESS char(64),\n\tSQL_PATH varchar(255),\n\tSECURITY_TYPE varchar(255),\n\tCREATED datetime,\n\tLAST_ALTERED datetime,\n\tSQL_MODE varchar(80),\n\tROUTINE_COMMENT varchar(12),\n\tDEFINER varchar(64),\n\tCHARACTER_SET_CLIENT varchar(64),\n\tCOLLATION_CONNECTION varchar(64),\n\tDATABASE_COLLATION varchar(64)\n)","locality":{"schemaName":"information_schema","tableName":"ROUTINES","targetName":"prototype"}},"PARAMETERS":{"createTableSQL":"CREATE TABLE information_schema.parameters (\n\tSPECIFIC_CATALOG varchar(64),\n\tSPECIFIC_SCHEMA varchar(64),\n\tSPECIFIC_NAME varchar(64),\n\tORDINAL_POSITION bigint(11) UNSIGNED,\n\tPARAMETER_MODE varchar(5),\n\tPARAMETER_NAME varchar(64),\n\tDATA_TYPE longtext,\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION int(10) UNSIGNED,\n\tNUMERIC_SCALE bigint(11),\n\tDATETIME_PRECISION int(10),\n\tCHARACTER_SET_NAME varchar(64),\n\tCOLLATION_NAME varchar(64),\n\tDTD_IDENTIFIER mediumtext,\n\tROUTINE_TYPE enum('FUNCTION', 'PROCEDURE')\n)","locality":{"schemaName":"information_schema","tableName":"PARAMETERS","targetName":"prototype"}}},"schemaName":"information_schema","shardingTables":{}}
- mycat2 启动了 没有逻辑数据库咋回事
方式1.
用客户端登录mycat,然后在mycat上执行mycat语法的建表语句(建表语法见官网)
方式2.
直接修改mycat的database配置文件,在原型库建表
- mycat2还有自己的数据库吗?
对, 有一个原型库(prototype),用于对外显示表结构与执行 select 1 这类的sql。
注: 原型库默认是127.0.0.1, 需要用户修改。
27.支持C#的客户端吗?
支持
28.![]L@1BM${KIKF3T1PFE6(_IX.png](/uploads/projects/ccazhw@ml3nkf/8d166688185c44b04e74974fa4431a12.png)
修改mycat.sql_log的sqlTime类型为bigint(20)
29.
sql中的字段出现两个相同的字段,这里是event_object_table在sql中出现两次,mycat不知道该排序哪个

event_object_table在naticat中sql会出现两次,导致该问题,可以忽略这个错误
30.在事务中,插入分片表,遇上主键冲突,然后后续操作报错,怎么解决?
在事务处理中加入回滚语句,可以解决这个问题
31.在使用过程中,出现连接不上mycat,或者mycat连接不了mysql,数据源无法获取连接,或者OOM,Mycat运行很慢
一般这个情况是出现了内存泄露,此时可以使用jmap dump内存镜像,或者添加
JVM添加下面属性配置自动dump,然后进行压力测试,获得dump文件后,使用jvisual查看占用内存多的对象,可以定位问题
-XX:+HeapDumpOnOutOfMemoryError 设置当首次遭遇内存溢出时导出此时堆中相关信息-XX:HeapDumpPath=/tmp/heapdump.hprof 指定导出堆信息时的路径或文件名
32.JAR打包时候出现Cannot access central in offline mode.确定没有设置offline属性
运行mvn clean verify可以解决这个问题
33.com.mysq1.cj.jdbc.exceptions.NysqDataTruncation: Data truncation: Incorrect time value: ‘38492’ for column ‘sqlTime’ at row
更改mycat.sql_log表的sqlTime字段类型为为bigint
34.java.sql.SQLSyntaxErrorException: Table ‘mysql.proc’ doesn’t exist
没有用到存储过程,不需要理会这个错误
mysql中没有proc表,在mysql8之前,存储过程和事件存储在mysql.proc和mysql.event表中.
解决方法:
1.更改mycat模拟的mysql版本是8系列的
SELECT VERSION()//8.0.12
2.在(原型库)mysql库中建立proc表
CREATE TABLE `proc` (`db` varchar(64) DEFAULT NULL,`name` varchar(64) DEFAULT NULL,`type` enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') DEFAULT NULL,`specific_name` varchar(64) DEFAULT NULL,`language` enum('SQL') DEFAULT NULL,`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') DEFAULT NULL,`is_deterministic` enum('YES','NO') DEFAULT NULL,`security_type` enum('INVOKER','DEFINER') DEFAULT NULL,`param_list` blob,`returns` longblob,`body` longblob,`definer` varchar(141) DEFAULT NULL,`created` timestamp NULL DEFAULT NULL,`modified` timestamp NULL DEFAULT NULL,`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT') DEFAULT NULL,`comment` text,`character_set_client` char(32) DEFAULT NULL,`collation_connection` char(32) DEFAULT NULL,`db_collation` char(32) DEFAULT NULL,`body_utf8` longblob,`aggregate` enum('NONE','GROUP') DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
35.quartz框架使用mycat偶然出现初始化失败?
quartz相关的表不使用读写分离就可以解决
36.please use schema
一般是重启了mycat,但是图形化客户端仍然使用旧的客户端连接导致的 ,新开一个连接就可以解决.
或者直接执行查询
use 业务库/逻辑库
也可以解决
37.
SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, CASEWHEN TABLE_TYPE = 'BASE TABLE' THENCASEWHEN TABLE_SCHEMA = 'mysql'OR TABLE_SCHEMA = 'performance_schema'THEN 'SYSTEM TABLE'ELSE 'TABLE'ENDWHEN TABLE_TYPE = 'TEMPORARY' THEN 'LOCAL_TEMPORARY'ELSE TABLE_TYPEEND AS TABLE_TYPE, TABLE_COMMENT AS REMARKS, NULL AS TYPE_CAT, NULL AS TYPE_SCHEM, NULL AS TYPE_NAME, NULL AS SELF_REFERENCING_COL_NAME, NULL AS REF_GENERATIONFROM INFORMATION_SCHEMA.TABLESWHERE TABLE_SCHEMA = 'wiiss_f1'AND TABLE_NAME LIKE 'ACT_RU_EXECUTION'HAVING TABLE_TYPE IN ('TABLE', NULL, NULL, NULL, NULL)ORDER BY TABLE_TYPE, TABLE_SCHEMA, TABLE_NAME
请修改
information_schema.schema.json
添加单表映射
"TABLES": {"locality": {"targetName": "prototype"}},
例子
{"customTables": {},"globalTables": {},"normalTables": {"ROUTINES": {"createTableSQL": "CREATE TABLE information_schema.ROUTINES (\n\tSPECIFIC_NAME varchar(192),\n\tROUTINE_CATALOG varchar(192),\n\tROUTINE_SCHEMA varchar(192),\n\tROUTINE_NAME varchar(192),\n\tROUTINE_TYPE varchar(27),\n\tDATA_TYPE varchar(1024),\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION bigint(3),\n\tNUMERIC_SCALE bigint(3),\n\tDATETIME_PRECISION bigint(3),\n\tCHARACTER_SET_NAME varchar(12),\n\tCOLLATION_NAME varchar(12),\n\tDTD_IDENTIFIER varchar(255),\n\tROUTINE_BODY varchar(255),\n\tROUTINE_DEFINITION varchar(255),\n\tEXTERNAL_NAME varchar(255),\n\tEXTERNAL_LANGUAGE varchar(255),\n\tPARAMETER_STYLE varchar(255),\n\tIS_DETERMINISTIC varchar(255),\n\tSQL_DATA_ACCESS char(64),\n\tSQL_PATH varchar(255),\n\tSECURITY_TYPE varchar(255),\n\tCREATED datetime,\n\tLAST_ALTERED datetime,\n\tSQL_MODE varchar(80),\n\tROUTINE_COMMENT varchar(12),\n\tDEFINER varchar(64),\n\tCHARACTER_SET_CLIENT varchar(64),\n\tCOLLATION_CONNECTION varchar(64),\n\tDATABASE_COLLATION varchar(64)\n)","locality": {"schemaName": "information_schema","tableName": "ROUTINES","targetName": "prototype"}},"TABLES": {"locality": {"targetName": "prototype"}},"PARAMETERS": {"createTableSQL": "CREATE TABLE information_schema.parameters (\n\tSPECIFIC_CATALOG varchar(64),\n\tSPECIFIC_SCHEMA varchar(64),\n\tSPECIFIC_NAME varchar(64),\n\tORDINAL_POSITION bigint(11) UNSIGNED,\n\tPARAMETER_MODE varchar(5),\n\tPARAMETER_NAME varchar(64),\n\tDATA_TYPE longtext,\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION int(10) UNSIGNED,\n\tNUMERIC_SCALE bigint(11),\n\tDATETIME_PRECISION int(10),\n\tCHARACTER_SET_NAME varchar(64),\n\tCOLLATION_NAME varchar(64),\n\tDTD_IDENTIFIER mediumtext,\n\tROUTINE_TYPE enum('FUNCTION', 'PROCEDURE')\n)","locality": {"schemaName": "information_schema","tableName": "PARAMETERS","targetName": "prototype"}},"CHARACTER_SETS": {"locality": {"targetName": "prototype"}},"COLLATIONS": {"locality": {"targetName": "prototype"}},"COLLATION_CHARACTER_SET_APPLICABILITY": {"locality": {"targetName": "prototype"}}},"schemaName": "information_schema","shardingTables": {}}
修改后会导致图形化客户端显示逻辑表有问题,请自己在原型库建立与逻辑表名字相同的物理表修正显示
38.mycat经常崩溃
1.检查监控的内存指标
2.使用jvm dump功能检查哪个对象占用内存
3.有没有其他程序占用大内存,导致mycat崩溃
- XAER_DUPID: The XID already exists
XA模下,同一个mysql在mycat只能配置一次
40.数据有时候有有时候没有?
检查集群主从是否同步正常,数据(行数)是否一致
41.
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (23 > -1). You can change this value on the server by setting the max_allowed_packet’ variable.
该错误常见于低版本mysql驱动
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.35</version></dependency>
设置jdbc属性
maxAllowedPacket=16777216jdbc:mysql://localhost:8066/mysql?maxAllowedPacket=16777216
就可以解决
42.Navicat查看表无法,直接编辑数据
在mycat2这个属于兼容性问题,是正常的
43.在Navicat里查看一些表,看不到索引,主键信息?
https://www.yuque.com/docs/share/6a967312-7d1d-4f2e-b031-2f9958ffd4d2?#
把一些系统表配置成单表覆盖Mycat内置的虚拟表就可以
44.使用mycat后,业务程序出现死锁等情况?
这个情况是因为业务程序没有显式使用事务隔离级别,而数据库默认设置是
READ_UNCOMMITTED
READ_COMMITTED
这两个隔离级别,而Mycat默认的隔离级别是REPEATED_READ
导致的,解决这个问题的办法是修改业务程序的事务隔离级别或者在mycat的xxx.user.json设置事务隔离级别
45.如何查看mysql中线程与会话的关系
SELECT THREAD_ID,PROCESSLIST_INFO, THREAD_OS_ID FROM performance_schema.threads WHERE PROCESSLIST_USER = ‘root’
46.mysqldump 导出数据乱码(表结构,comment)
加上 —hex blob 参数
47.修改mysql登录密码插件
alter user 'admin'@'%' identified with mysql_native_password by 'your_password';
48.Navicat里看不到自定义函数?
需要mysql把自定义函数相关的系统表映射到mycat里,可以在information.schema.json文件里面添加targetName指向prototype集群解决这个问题
49.sql中使用自定义函数,结果不符合预期?
尝试在函数前写上函数所在的物理库库名,可以解决这个问题或者在数据源上面的默认库与sql中的函数所在的库对应
50.![`J$EDKSU[Y$D%H6]YARJS90.png](/uploads/projects/ccazhw@ml3nkf/0dbdf0f8b4064103c976d46044371a99.png)
information_schema.schema.json
添加单表,覆盖虚拟表SCHEMATA可以暂时解决,但是查询mycat的逻辑库逻辑表会显示错误
"SCHEMATA": {"createTableSQL":"CREATE TABLE IF NOT EXISTS `information_schema`.`SCHEMATA` (\n\tCATALOG_NAME varchar(512),\n\tSCHEMA_NAME varchar(64),\n\tDEFAULT_CHARACTER_SET_NAME varchar(64),\n\tDEFAULT_COLLATION_NAME varchar(32),\n\tSQL_PATH varchar(512)\n)","locality": {"targetName": "prototype"}}
整个配置文件例子
{"customTables": {},"globalTables": {},"normalTables": {"ROUTINES": {"createTableSQL": "CREATE TABLE information_schema.ROUTINES (\n\tSPECIFIC_NAME varchar(192),\n\tROUTINE_CATALOG varchar(192),\n\tROUTINE_SCHEMA varchar(192),\n\tROUTINE_NAME varchar(192),\n\tROUTINE_TYPE varchar(27),\n\tDATA_TYPE varchar(1024),\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION bigint(3),\n\tNUMERIC_SCALE bigint(3),\n\tDATETIME_PRECISION bigint(3),\n\tCHARACTER_SET_NAME varchar(12),\n\tCOLLATION_NAME varchar(12),\n\tDTD_IDENTIFIER varchar(255),\n\tROUTINE_BODY varchar(255),\n\tROUTINE_DEFINITION varchar(255),\n\tEXTERNAL_NAME varchar(255),\n\tEXTERNAL_LANGUAGE varchar(255),\n\tPARAMETER_STYLE varchar(255),\n\tIS_DETERMINISTIC varchar(255),\n\tSQL_DATA_ACCESS char(64),\n\tSQL_PATH varchar(255),\n\tSECURITY_TYPE varchar(255),\n\tCREATED datetime,\n\tLAST_ALTERED datetime,\n\tSQL_MODE varchar(80),\n\tROUTINE_COMMENT varchar(12),\n\tDEFINER varchar(64),\n\tCHARACTER_SET_CLIENT varchar(64),\n\tCOLLATION_CONNECTION varchar(64),\n\tDATABASE_COLLATION varchar(64)\n)","locality": {"schemaName": "information_schema","tableName": "ROUTINES","targetName": "prototype"}},"PARAMETERS": {"createTableSQL": "CREATE TABLE information_schema.parameters (\n\tSPECIFIC_CATALOG varchar(64),\n\tSPECIFIC_SCHEMA varchar(64),\n\tSPECIFIC_NAME varchar(64),\n\tORDINAL_POSITION bigint(11) UNSIGNED,\n\tPARAMETER_MODE varchar(5),\n\tPARAMETER_NAME varchar(64),\n\tDATA_TYPE longtext,\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION int(10) UNSIGNED,\n\tNUMERIC_SCALE bigint(11),\n\tDATETIME_PRECISION int(10),\n\tCHARACTER_SET_NAME varchar(64),\n\tCOLLATION_NAME varchar(64),\n\tDTD_IDENTIFIER mediumtext,\n\tROUTINE_TYPE enum('FUNCTION', 'PROCEDURE')\n)","locality": {"schemaName": "information_schema","tableName": "PARAMETERS","targetName": "prototype"}},"CHARACTER_SETS": {"locality": {"targetName": "prototype"}},"COLLATIONS": {"locality": {"targetName": "prototype"}},"COLLATION_CHARACTER_SET_APPLICABILITY": {"locality": {"targetName": "prototype"}},"SCHEMATA": {"locality": {"targetName": "prototype"}}},"schemaName": "information_schema","shardingTables": {}}

