其前提条件:
mysql主从复制已经配置完成
目的
使用mycat作为一个访问数据库前的一层,用来管理读写操作,而不用配置多个数据源访问不同mysql服务器
当前信息:
主mysql:118.25.178.145,用户名root,密码123456
从mysql:106.12.203.18,用户名root,密码123456
mycat:118.25.178.145
安装
- mycat需要jre环境
- 修改环境变量
- 修改配置文件信息:schema.xml,server.xml
jre环境
略
修改环境变量
解压完后配置
vim /etc/profile
添加
MYCAT_HOME=解压目录
// 添加PATH,在末尾加
PATH=$PATH:$MYCAT_HOME/bin
source /etc/profile
修改配置文件
schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同
name 为通过客户端连接查询到的逻辑库名 也就是对应真实数库的别名
checkSQLschema 表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 realfake_schema1,则可能写为select * from realfake_schema1.edu_user,此时会自动过滤TESTDB,SQL变为select * from edu_user,若不会出现上述写法,则可以关闭属性为false
sqlMaxLimit默认返回的最大记录数限制,MyCat1.4版本里面,用户的Limit参数会覆盖掉MyCat的sqlMaxLimit默认设置
-->
<schema name="realfake_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="realfake_dn1"></schema>
<!--
定义MyCat的数据节点
name 数据表示节点名称
dataHost表示数据主机名称
database表示该节点要路由的数据库的名称
-->
<dataNode name="realfake_dn1" dataHost="dtHost1" database="test" />
<!-- 使用MyCat托管MySQL主从切换 -->
<!-- 定义数据主机dtHost1,连接到MySQL读写分离集群,并配置了读写分离和主从切换 -->
<dataHost name="dtHost1" maxCon="500" minCon="20" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<!-- 通过show slave status检测主从状态,当主宕机以后,发生切换,从变为主,原来的主变为从,这时候show slave status就会发生错误,因为原来的主没有开启slave,不建议直接使用switch操作,而是在DB中做主从对调。 -->
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM" url="118.25.178.145:3306" user="root" password="123456" />
<writeHost host="hostS" url="106.12.203.18:3306" user="root" password="123456" />
</dataHost>
<!-- 参数balance决定了哪些MySQL服务器参与到读SQL的负载均衡中 -->
<!-- balance="0",为不开启读写分离,所有读操作都发送到当前可用的writeHost上-->
<!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->
<!-- balance="2",所有读操作都随机的在writeHost、readHost上分发-->
<!-- MyCat1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在MyCat里配置为两个writeHost并设置balance="1" -->
<!-- writeType="0",所有写操作都发送到可用的writeHost上 -->
<!-- writeType="1",仅仅对于galera for mysql集群这种多主多节点都能写入的集群起效,此时Mycat会随机选择一个writeHost并写入数据,对于非galera for mysql集群,请不要配置writeType=1,会导致数据库不一致的严重问题 -->
</mycat:schema>
server.xml
在最底部配置可以连接到mycat的用户信息
<user name="root">
<property name="password">123456</property>
<property name="schemas">realfake_schema1</property>
</user>
<user name="realfake">
<property name="password">123456</property>
<property name="schemas">realfake_schema1</property>
<property name="readOnly">true</property>
</user>
在开发阶段配置log4j的日志级别为debug
进入解压目录
cd conf/log4j.xml
修改‘info’为‘debug’
上线后改回
测试配置结果
进入解压目录,调试模式启动,关闭控制台即停止服务
cd bin
./mycat console
也可
./mycat start
./mycat stop
./mycat restart
确认无错后
使用navicat连接mycat
请确保服务器防火墙已经开启8066(连接mycat)和9066(监控mycat)端口
用户名和密码为server.xml配置的用户信息
原数据库中的数据库名为test
在经过mycat代理后变为我们在schema.xml配置的逻辑库名
使用查询语句
可以看到是从从mysql上读取的数据
添加记录
看到是从主mysql上进行数据更新
登录从mysql查看数据是否更新到从mysql
配置成功。