Mycat常见问题与解决方案---宜将剩勇追穷寇,不可沽名学霸王

java 1040 2019-06-12 06:34

1 Mycat目前有哪些功能与特性?

答: 

• 支持 SQL 92标准 

• 支持Mysql集群,可以作为Proxy使用 

• 支持JDBC连接多数据库 

• 支持NoSQL数据库 

• 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群 

• 自动故障切换,高可用性 

• 支持读写分离,支持Mysql双主多从,以及一主多从的模式 

• 支持全局表,数据自动分片到多个节点,用于高效表关联查询 

• 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询 

• 支持一致性Hash分片,有效解决分片扩容难题 

• 多平台支持,部署和实施简单 

• 支持Catelet开发,类似数据库存储过程,用于跨分片复杂SQL的人工智能编码实现,143行Demo完成跨分片的两个表的JION查询。 

• 支持NIO与AIO两种网络通信机制,Windows下建议AIO,Linux下目前建议NIO 

• 支持Mysql存储过程调用 

• 以插件方式支持SQL拦截和改写 

• 支持自增长主键、支持Oracle的Sequence机制

 

2 Mycat除了Mysql还支持哪些数据库?

答:mongodb、oracle、sqlserver 、hive 、db2 、 postgresql。

 

3 Mycat目前有生产案例了么?

答:目前Mycat初步统计大概600家公司使用。

 

4 Mycat稳定性与Cobar如何?

答:目前Mycat稳定性优于Cobar,而且一直在更新,Cobar已经停止维护,可以放心使用。

 

5 Mycat支持集群么?

答:目前Mycat没有实现对多Mycat集群的支持,可以暂时使用haproxy来做负载,或者统计硬件负载。

 

6 Mycat多主切换需要人工处理么?

答:Mycat通过心跳检测,自主切换数据库,保证高可用性,无须手动切换。

 

7 Mycat目前有多少人开发?

答:Mycat目前开发全部是志愿者无偿支持,主要有以leaderus 为首的Mycat-Server 开始、以rainbow为首的Mycat-web开发、以海王星为首的产品发布及代码管理,还有以Marshy为首的推广。

 

8 Mycat目前有哪些项目?

答:Mycat-Server :Mycat核心服务、 

Mycat-spider : Mycat爬虫技术、 

Mycat-ConfigCenter :Mycat配置中心 、 

Mycat-BigSQL : Mycat大数据处理(暂未更细)、 

Mycat-Web : Mycat监控及web(新版开发中) 、 

Mycat-Balance :Mycat集群负载(暂未更细)

 

9 Mycat最新的稳定版本是哪个到哪里下载?

答:打包代码:Mycat最新稳定版是1.5.1 ,1.6为aphla,下载地址是:https://github.com/MyCATApache/Mycat-download。 

文档:https://github.com/MyCATApache/Mycat-doc 

源码:https://github.com/MyCATApache/Mycat-Server

 

10 Mycat如何配置字符集?

答:在配置文件server.xml配置,默认配置为utf8。 

utf8

 

11 Mycat后台管理监控如何使用?

答:9066端口可以用JDBC方式执行命令,在界面上进行管理维护,也可以通过命令行查看命令行操作。 

命令行操作是:mysql -h127.0.0.1 -utest -ptest -P9066 登陆,然后执行相应命令。

 

12 Mycat主键插入后应用如何获取?

答:获得自增主键,插入记录后执行select last_insert_id()获取。

 

13 Mycat如何启动与加入服务?

答:目前Mycat暂未封装加入服务,需要自己封装。 

linux环境为: 

./mycat start 启动 

./mycat stop 停止 

./mycat console 前台运行 

./mycat restart 重启服务 

./mycat pause 暂停 

./mycat status 查看启动状态 

window启动为: 

直接双击运行 startup_nowrap.bat ,如果闪退用cmd模式运行查看日志。

 

14 Mycat运行sql时经常阻塞或卡死是什么原因?

答: 如果出现执行sql语句长时间未返回,或卡死,请检查是否是虚机下运行或cpu为单核,具体解决方式请参 考:https://github.com/MyCATApache/Mycat-Server/issues/73,如果仍旧无法解决,可以暂时跳过,目前有些环境阻塞卡死原因未知。

 

15 Mycat中,旧系统数据如何迁移到Mycat中?

答:旧数据迁移目前可以手工导入,在mycat中提取配置好分配规则及后端分片数据库,然后通过dump或loaddata方式导入,后续Mycat就做旧数据自动数据迁移工具。

 

16 Mycat如何对旧分片数据迁移或扩容,支持自动扩容么?

答:目前除了一致性hash规则分片外其他数据迁移比较困难,目前暂时可以手工迁移,未提供自动迁移方案,具体迁移方案情况Mycat权威指南对应章节。

 

17 Mycat支持批量插入吗?

答:目前Mycat1.3.0.3以后支持多values的批量插入,如insert into(xxx) values(xxx),(xxx) 。

 

18 Mycat支持多表Join吗?

答:Mycat目前支持2个表Join,后续会支持多表Join,具体Join请看Mycat权威指南对应章节。

 

19 Mycat 启动报主机不存在的问题?

答:需要添加ip跟主机的映射。

 

20 Mycat连接会报无效数据源(Invalid datasource)?

答:例如报错:mysql> select * from company; 

ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0 

这类错误最常见是一些配置问题例如schema.xml中的dataNode的配置和实际不符合,请先仔细检查配置项,确保配置没有问题。如果不是配置问题,分析具体日志看出错原因,常见的有: 

如果是应用连:在某些版本的Mysql驱动下连接Mycat会报错,可升级最新的驱动包试下。 

如果是服务端控制台连,确认mysql是否开启远程连接权限,或防火墙是否设置正确,或者数据库database是否配置,或用户名密码是否正确。

 

21 Mycat使用中如何提需求或bug?

答:bug或新需求可以到群里提问,同时最好到github发起以isuues:https://github.com/MyCATApache/Mycat-Server/issues

 

22 Mycat如何建表与创建存储过程?

答:注意注解中语句是节点的表请替换成自己表如select 1 from 表 ,查出来的数据在那个节点往哪个节点建 

存储过程 

/!mycat: sql=select 1 from 表 / CREATE DEFINER=root@% PROCEDURE proc_test() BEGIN END ; 

表: 

/!mycat: sql=select 1 from 表 /create table ttt(id int);

 

23 Mycat目前有多少人维护?

答:目前初步统计有10人以上核心人员维护。

 

24 Mycat支持的或者不支持的语句有哪些?

答:insert into,复杂子查询,3表及其以上跨库join等不支持。

 

25 MycatJDBC连接报 PacketTooBigException异常

答:检查mysqljdbc驱动的版本,在使用mycat1.3和mycat1.4版本情况下,不要使用jdbc5.1.37和38版本的驱动,会出现如下异常报错:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (60 > -1). You can change this value on the server by setting the max_allowed_packet’ variable。建议使用jdbc5.1.35或者36的版本。

 

26 Mycat中文乱码的问题

答:如果在使用mycat出现中文插入或者查询出现乱码,请检查三个环节的字符集设置:1)客户端环节(应用程序、mysql命令或图形终端工具)连接mycat字符集2)mycat连接数据库的字符集3)数据库(mysql,oracle)字符集。这三个环节的字符集如果配置一致,则不会出现中文乱码,其中尤其需要注意的是客户端连接mycat时使用的连接字符集,通常的中文乱码问题一般都由此处设置不当引出。其中mycat内部默认使用utf8字符集,在最初启动连接数据库时,mycat会默认使用utf8去连接数据库,当客户端真正连接mycat访问数据库时,mycat会使用客户端连接使用的字符集修改它连接数据库的字符集,在mycat环境的管理9066端口,可以通过show @@backend命令查看后端数据库的连接字符集,通过show @@connection命令查看前端客户端的连接字符集。客户端的连接可以通过指定字符集编码或者发送SET命令指定连接mycat时connection使用的字符集,常见客户端连接指定字符集写法如下: 

1) jdbcUrl=jdbc:mysql://localhost:8066/databaseName? characterEncoding=iso_1 

2) SET character_set_client = utf8;用来指定解析客户端传递数据的编码 

SET character_set_results = utf8;用来指定数据库内部处理时使用的编码 

SET character_set_connection = utf8;用来指定数据返回给客户端的编码方式 

3) mysql –utest –ptest –P8066 –default-character-set=gbk

 

27 Mycat无法登陆Access denied

答:Mycat正常安装配置完成,登陆mycat出现以下错误: 

[mysql@master ~]$ mysql -utest -ptest -P8066 

ERROR 1045 (28000): Access denied for user ‘test’@’localhost’ (using password: YES) 

请检查在schema.xml中的相关dataHost的mysql主机的登陆权限,一般都是因为配置的mysql的用户登陆权限不符合,mysql用户权限管理不熟悉的请自己度娘。只有一种情况例外,mycat和mysql主机都部署在同一台设备,其中主机localhost的权限配置正确,使用-hlocalhost能正确登陆mysql但是无法登陆mycat的情况,请使用-h127.0.0.1登陆,或者本地网络实际地址,不要使用-hlocalhost,很多使用者反馈此问题,原因未明。

 

28 Mycat的分片数据插入报异常IndexOutofBoundException

答:在一些配置了分片策略的表进行数据插入时报错,常见的报错信息如下:java.lang.IndexOutOfBoundsException:Index:4,size:3这类报错通常由于分片策略配置不对引起,请仔细检查并理解分片策略的配置,例如:使用固定分片hash算法,PartitionByLong策略,如果schema.xml里面设置的分片数量dataNode和rule.xml配置的partitionCount 分片个数不一致,尤其是出现分片数量dataNode小于partitionCount数量的情况,插入数据就可能会报错。很多使用者都没有仔细理解文档中对分片策略的说明,用默认rule.xml配置的值,没有和自己实际使用环境进行参数核实就进行分片策略使用造成这类问题居多。

 

29 Mycat ER分片子表数据插入报错

答:一般都是插入子表时出现不能找到父节点的报错。报错信息如: [Err] 1064 - can’t find (root) parent sharding node for sql:。此类ER表的插入操作不能做为一个事务进行数据提交,如果父子表在一个事务中进行提交,显然在事务没有提交前子表是无法查到父表的数据的,因此就无法确定sharding node。如果是ER关系的表在插入数据时不能在同一个事务中提交数据,只能分开提交。

 

30 Mycat最大内存无法调整至4G以上

答:mycat1.4的JVM使用最大内存调整如果超过4G大小,不能使用wrapper.java.maxmemory参数,需要使用wrapper.java.additional的写法,注意将wrapper.java.maxmemory参数注释,例如增加最大内存至8G:wrapper.java.additional.10=-Xmx8G。

 

31 Mycat使用过程中报错怎么办

答:记住无论什么时候遇到报错,如果不能第一时间理解报错的原因,首先就去看日志,无论是启动(wrapper.log)还是运行过程中(mycat.log),请相信良好的日志是编程查错的终极必杀技。日志如果记录信息不够,可以调整conf/log4j.xml中的level级别至debug,所有的详细信息均会记录。另外如果在群里面提问,尽量将环境配置信息和报错日志提供清楚,这样别人才能快速帮你定位问题。

 

mycat顶级教程点我

 

 

文章评论