使用MyCat中间件代理MySql读写分离

其前提条件:

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

配置成功。

猜你喜欢

转载自blog.csdn.net/qq_33683097/article/details/84979689