mycat导入大量数据报错query
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mycat导入大量数据报错query相关的知识,希望对你有一定的参考价值。
很抱歉给您带来不便,您可以尝试检查一下您的mycat配置是否正确,比如检查一下数据库连接是否正确,检查一下数据库表是否存在,检查一下数据库表是否有正确的字段,检查一下数据库表是否有正确的索引,检查一下数据库表是否有正确的权限,检查一下数据库表是否有正确的数据类型等等。如果您的mycat配置正确,您可以尝试检查一下您导入的数据格式是否正确,比如检查一下数据是否有正确的字段,检查一下数据是否有正确的数据类型,检查一下数据是否有正确的格式等等。如果您的数据格式正确,您可以尝试检查一下您的SQL语句是否正确,比如检查一下SQL语句是否有正确的字段,检查一下SQL语句是否有正确的连接,检查一下SQL语句是否有正确的查询条件等等。如果您的SQL语句正确,您可以尝试检查一下您的查询结果是否正确,比如检查一下查询结果是否有正确的字段,检查一下查询结果是否有正确的数据类型,检查一下查询结果是否有正确的格式等等。如果您的查询结果正确,您可以尝试检查一下您的mycat是否正确处理了您的查询结果,比如检查一下mycat是否有正确的缓存策略,检查一下mycat是否有正确的查询优化策略,检查一下mycat是否有正确的数据分片等等。希望以上建议能帮助您解决mycat导入大量数据报错的问题。 参考技术A 很抱歉给您带来不便,mycat导入大量数据报错的原因可能是因为数据格式不正确,或者数据库中存在重复数据,或者数据库中存在索引冲突,或者数据库中存在空值,或者数据库中存在数据类型不匹配的情况。因此,在导入大量数据时,应该检查数据格式是否正确,检查数据库中是否存在重复数据,检查数据库中是否存在索引冲突,检查数据库中是否存在空值,以及检查数据库中是否存在数据类型不匹配的情况。如果以上情况都排除,那么可以尝试重新导入数据,或者重新配置mycat,以解决导入大量数据报错的问题。 参考技术B 本文档不只是解决query_cache_size问题,还说明如何下载代码及如何进行更新。本文档,是我踩的坑,希望让大家少走弯路了。
基于现有包修改驱动
mycat1.x版本不支持mysql8.0;mycat2.0还没有提供正式包也不敢用。所以只能让mycat1.x版本来支持mysql8.0.
先使用最新的mycat1.6.7 使用网上的方法,更换驱动包 为8.0以上,但是 navicat连接没有问题,但是程序连接报错 query_cache_size;
更换 mycat为旧版本1.6.4 ,更换驱动包,这样,程序不报错了,并且navicat可以连接没问题,但是 时不时就出现 Cannot execute statement in a READ ONLY transaction.这个地方很有意思,不是一直报这个错,频繁的操作数据库才会报错。
使用mycat1.4 ,直接登录不了。
到此为止,我已经对于mycat提供好的程序包无能为力,只能修改mycat源码了
mycat源码修改
代码选择这部分可能我是走弯路,要是有更好方法就直接跳过吧
也是很难的,很多版本,也不知道哪个是正式稳定的版本。所以就随意选择了一个
https://github.com/MyCATApache/Mycat-Server/tree/1.676-2020-11-2 我是基于这个修改,至于,到底用哪个可以自己斟酌一下了。我选择的这个版本还是有问题的,程序连接的时候不能修改数据,直接报错,所以还是要更新程序。
然后 在包下载地址找个资源包,http://dl.mycat.org.cn/ 我选择的是 http://dl.mycat.org.cn/1.6.7.6/20210303094759/
解压以后,我解决把代码复制到程序中了
我复制的这部分内容
接下来处理 query_cache_size问题
SelectHandler
c.execute(stmt, ServerParse.SELECT);
改为
SelectVariables.execute(c,stmt);
然后重新打包就可以了,只有有没有其他bug,暂时没发现。
修改好的程序包可以直接 https://download.csdn.net/download/zhangjing7809/16547316 进行下载 参考技术C 基于现有包修改驱动mycat1.x版本不支持mysql8.0;mycat2.0还没有提供正式包也不敢用。所以只能让mycat1.x版本来支持mysql8.0.先使用最新的mycat1.6.7 使用网上的方法,更换驱动包 为8.0以上,但是 navicat连接没有问题,但是程序连接报错 query_cache_size;更换 mycat为旧版本1.6.4 ,更换驱动包,这样,程序不报错了,并且navicat可以连接没问题,但是 时不时就出现 Cannot execute statement in a READ ONLY transaction.这个地方很有意思,不是一直报这个错,频繁的操作数据库才会报错。使用mycat1.4 ,直接登录不了。到此为止,我已经对于mycat提供好的程序包无能为力,只能修改mycat源码了mycat源码修改代码选择这部分可能我是走弯路,要是有更好方法就直接跳过吧也是很难的,很多版本,也不知道哪个是正式稳定的版本。所以就随意选择了一个https://github.com/MyCATApache/Mycat-Server/tree/1.676-2020-11-2 我是基于这个修改,至于,到底用哪个可以自己斟酌一下了。我选择的这个版本还是有问题的,程序连接的时候不能修改数据,直接报错,所以还是要更新程序。然后 在包下载地址找个资源包,http://dl.mycat.org.cn/ 我选择的是 http://dl.mycat.org.cn/1.6.7.6/20210303094759/解压以后,我解决把代码复制到程序中了我复制的这部分内容 接下来处理 query_cache_size问题 SelectHandler c.execute(stmt, ServerParse.SELECT);改为SelectVariables.execute(c,stmt); 然后重新打包就可以了,只有有没有其他bug,暂时没发现。 修改好的程序包可以直接 https://download.csdn.net/download/zhangjing7809/16547316 进行下载 参考技术D 根据相关资料,MyCat导入大量数据时可能会报query错误,此时可以做的是查看SQL日志,以诊断出究竟是哪一步出现了问题。
以上是关于mycat导入大量数据报错query的主要内容,如果未能解决你的问题,请参考以下文章
oracle,FORM,删除数据时,只能按插入的顺序删除,才不会报错。(FRM 40654 记录已被其他使用者更新 )