最近项目要使用新的架构,后端数据库要使用Mycat中间件来实现,但是无没接触过啊,没接触过,那怎么办,卧薪藏胆来搞呗。。 接住这个bug,然后修改。
之前项目用的mysql是主从的架构,但是这样的架构有一些弊端:
主从同步总是出现问题
读写的压力全部积压到了master机器上了,导致系统出现瓶颈
系统扩容不是灵活
综上所述,故而决定使用mysql中间库Mycat

MyCat
Mysql-Master
Mysql-slave
192.168.1.186
192.168.1.202
Ubuntu14.04
MyCat 1.6
Mysql 5.5
1.Mysql主从安装
配置MySql主从就不在说明发,因为我们架构中对mysql的切换要求是当Master down机后Slave不在支持写功能,依旧当做Slave使用,并且提供myslq Read服务。所有要禁止slave的Write功能。
关于主从要说一下几点:
设置slave只读有如下几句语法:
因为开启了全局锁表所有的用户对数据库都不能进行写的操作,故而我们只能设置写权限的开关,即 set global read_only=1;
因为只关闭了普通用户的写权限,所以我们在给前端用户分发库权限的时候,一定要针对某个库分配权限,不要使用.的模式进行权限分发。
2.下载Mycat
3.安装Mycat
安装Mycat很容易,只需要解压,然后把解压的目录指定到$PATH全局环境变量中即可。
4.配置文件讲解
关于balance、writeType、switchType这三个参数重点讲解
为什么balance的值要等于1:
因为我们的目的是对mysql进行读写分离,而balance=1的时候,适用于的集群模式,也就是说M1-S1、M2-S2、M1-M2的时候M2、S1、S2都会处理读的请求,我们只有一对主从即M1-S1,所以所有的请求会转发的S1上;
我们writeType设置的值为0,所有所有的write请求在第一个writeHost没有down机的情况下,都会转发的第一个WriteHost上;
而我们switchType设置的是-1也就是说当主从复制的时候Master挂掉后不会进行主从的切换,那么从就不会来接替主的工作,这样写的请求就不会转发到从上;
综上三点所述,这样所有的读写请求就被自然的分开了。
heartbeat的参数是来设置检测后端mysql实例是否可以正常工作的设置,因为我们不需要进行主从切换的操作,所以使用了select user()语句进行检查后端实例的存活状态即可。
这个配置文件如果修改了后,不需要重启mycat服务,修改完后静等10秒钟服务会自动重新加载这个配置文件
里面有好多的注释设置,不用理睬,我们主要来看下面你这段设置。
name=“xinsir”这里的name设定的是用户名称
name=password标签中的123是设置的用户为xinsir的密码
name="schemas"标签中设定的参数是Schema.xml配置文件中的schema的名字,这里要一一对应不然启动的时候会报错,说找不到schema。
如果想设置只读用户,那么在这个标签下面再加一个标签为
即表示这个用户对应的schema逻辑库都是只读。
为了更好的看到mycat的工作状态我们开启日志级别为debug模式,这样打出的日志会更详细。
如果验证读写分离是否生效,我们可以观看logs/mycat.log文件。
1.ERROR:3099:java.long.IllegalArgument Exception:Invalid Deita Source:0
这个问题一般会有如下几个原因:
权限entity
mysql的错误连接数过多,刷新mysql状态(小编遇到了这个坑)
ip地址配置错误
mysql故障
2.启动不了
尝试脚本本地启动 start_nowrap
检测Warp-xxx的可执行文件
内存参数修改
配置文件格式
3.命令行可以连接程序无法连接报错0miuisecons ago.
一般是防火墙问题
4.程序连接一段时间报错
Last packet sent to the server was 76548 ms ago
可能是程序没有开启连接池定时检测机制,导致连接空闲超时被mysql关闭。
mycat连接池默认时间为30分钟(空闲连接)
而mysql连接池默认时间为8小时,二者相差甚多。
本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/2055967,如需转载请自行联系原作者