linux 下使用mycat 实现 mysql读写分离 以及跳坑说明

linux 下 mysql读写分离

环境要求 liunx 环境

一,安装 mysql 5.6 ,配置主从

http://note.youdao.com/noteshare?id=d807217581990ca42dfd47e562953b0d&sub=D017A68A83D240E4B6C2D0A93A38138C

二,安装jdk 1.7 并在wrapper.conf中配置java位置

https://www.cnblogs.com/Dylansuns/p/6974272.html

在mycat/conf/wrapper.conf 下增加:

wrapper.java.command=java安装目录/bin/java

例如:wrapper.java.command=/home/hadoop/software/jdk1.8.0_181/bin/java

 

三,安装mycat 1.6

地址1:

链接:https://pan.baidu.com/s/1qsjEWrNLMcyJYWMborSRHw 
提取码:6z2j 
地址2

https://github.com/MyCATApache/Mycat-download

参考:https://blog.csdn.net/zxgmlcj/article/details/78396426

tar  -zxvf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

四,配置 hosts文件

修改hosts文件,绑定主机名

最后一行加 172.16.30.151 server1

# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.30.151 server1

 

五,mycat的日志

mycat 启动日志 : log下的 wrapper.log

mycat 的运行日志 : log下的 mycat.log

mycat 日志级别 修改 conf  下的  log4j2.xml 

调试的时候改成debug 模式以方便看调用的是哪个库

(生产服务器日志级别记得一定要调低)

 

六,mycat常用命令 https://www.cnblogs.com/parryyang/p/5606071.html

启动 与停用

进入        /mycat/bin 下  

启动: ./mycat start   停用:./mycat stop

 

七 , 读写分离配置

两台服务器

172.16.30.151 主 写

172.16.30.153 从 读

配置 1 schema.xml































select user()


















 

0 0 2 165535 0 0 1m 1k 0 384m true MyComm2016 yuanYang MyComm2016 yuanYang true

 

 

八,数据库连接配置

配置完server.xml 后在数据库链接配置文件中配置

 

jdbc.url=jdbc:mysql://172.16.30.151:8066/yuanYang?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

jdbc.username=crm_yuan_yang_user

jdbc.password=MyComm2016

//(mycat 默认的端口号为 8066)

 

八,异常汇总

(1)Mycat1.6启动报NumberFormatException解决方案

解决方案:off heap for merge/order/group/limit 1开启 0关闭 --->修改配置文件值为: 0

 

(2)mycat启动报Unable to start JVM: No such file or directory 

解决方法:原因可能是JVM参数没有配置或者配置错误 

处理方案: 

在mycat/conf/wrapper.conf 下增加:

wrapper.java.command=java安装目录/bin/java

例如:wrapper.java.command=/home/hadoop/software/jdk1.8.0_181/bin/java

 

(3)mycat 启动失败 The specified size exceeds the maximum representable size JVM exited while loading the a

解决办法:#最大内存不足Xmx4G,设置相关启动的配置文件

vi /usr/local/mycat/conf/wrapper.conf

wrapper.java.additional.10=-Xmx4G

wrapper.java.additional.11=-Xms1G

改为:

wrapper.java.additional.10=-Xmx512M

wrapper.java.additional.11=-Xms64M

再次启动,正常:

 

(4)mycat启动报错:JVM exited while loading the application.根据报错信息,怀疑主机名没有绑定,绑定主机名后重启就行了

  上文有说到

(5) 启动成后但 代码不是从 153 读服务器 里读的

  关闭事务:

  事务内部的一切操作都会走写节点,所以读

  操作不要加事务,如果读延时较大,使用根据主从延时的读写分离

  service 层 的读方法前加 @Transactional(propagation=Propagation.NOT_SUPPORTED)

  例如:

  @Transactional(propagation=Propagation.NOT_SUPPORTED)

  public OaNotify get(String id) {

   OaNotify entity = dao.get(id);

  return entity;

 }

 

(6)批量更新插入时sql 长度不能够太大 没用mycat 之前我5000条更新成功  ,用了之后失败,改到2000条才 成功,

 修改相关配置 maxStringLiteralLength  ,processorBufferLocalPercent  ,processorBufferPool 的大小都没成功  ,

 如果哪位大神知道该怎么做请留言,感激不尽

 

(7)读写分离造成脏读的问题,就是A库写,B库读,A库写完再同步到B库中有个很小的时间差,如果A写完立马读B,B中的数据还是旧数据,没从A同步过来

 解决方案查看下面链接  http://www.cnblogs.com/beyondbit/p/6879949.html

 mysql  升级到 5.7版本有并行复制的机制,同时写入A和B   ,彻底解决此问题,https://www.cnblogs.com/langdashu/p/6125621.html  可我们生产用的是5.6 想哭的感觉............

(8)生产运行一段时间报sql错误 :Cause: java.sql.SQLException: Got error 28 from storage engine  

df -h      查看磁盘占用情况,

发现 /dev/sda3占用了100%,

那么我们du -s -h ./*看下目录的占用情况 ,

发现 wrapper.log 360多G我的天 ,干掉这日志文件之后就恢复了,

 

因为有tomcat的日志这个mycat日志个人感觉关掉就行,调试的时候看一下,生产上没必要

进入mycat/conf     vim  wrapper.log

找到 loglevel全部改为  NONE ,有三处

wrapper.console.loglevel=NONE

wrapper.logfile.loglevel=NONE

wrapper.syslog.loglevel=NONE

然后重启就关掉了  不是改为 off  ,是 NONE和 log4j 的日志级别不一样

脚本配置文件wrapper.conf详解:

https://blog.csdn.net/d6619309/article/details/73740146

 

(9)mycat调用带输出参数的存储过程:

https://blog.csdn.net/zhaofuqiangmycomm/article/details/88182200

 

 

 

 

你可能感兴趣的:(mysql数据库)