mycat 实现读写分离

1. mycat简介

mycat是一个开源数据库中间件;它可以管理你的所有数据库,并对他们进行读写分离,分库分表等。

使用起来的话Mycat就是一个近似于MySQL的数据库服务器,你可以用连接MySQL的方式去连接Mycat(除了端口不同,默认的Mycat端口是8066而非MySQL的3306),大多数情况下,可以用你熟悉的对象映射框架比如MyBatis操作Mycat。

它最主要的两个功能就是:

  • 数据库的读写分离
  • 分库分表

2. 下载mycat

mycat的官网:https://github.com/MyCATApache/Mycat-Server

可以从这里去下载,我下载的是1.6版本的

下载后,直接解压

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

然后进入bin目录,执行以下命令就可以启动了

./mycat start

MyCat关闭命令:

./mycat stop

登录mycat:用类似mysql的登录方式就可以登录了,初始账号下面会有说明

mysql -uroot -p -P8066 -h127.0.0.1

mycat默认数据访问端口是8066

3. 配置文件

其实进行读写分离 我们只需要配置2个文件就可以使用了,进入conf文件夹:

  • server.xml:系统配置,比如用户,白名单等
  • schema.xml: 配置关联的数据库,在这里面做读写分离,分库分表等操作

3.1 server.xml讲解





	
	0  
	0  
	
	
		2
		
		0
		0
		1
		1m
		1k
		0
		384m
		true
	
	
	
	
	
	
	
		123456
		mycatdb
	
	
	
	
		123456
		mycatdb
		
		
		
	
	
	
		user
		mycatdb
		true
	


其实在这个文件中,我们只是新增了一个mycat账号,并且把所有用户的逻辑数据库全部改为了mycatdb,接下来我们就要去创建逻辑数据库mycatdb了。

 

3.2 schema.xml解读





	
	
		
	

	
	
	
	
	
	
			  
		
		
		select user()


		
		
			
			
			
		
		
	

 我的数据库格式如下:

mycat 实现读写分离_第1张图片

 dataNode标签中的database属性指的就是真实tfp数据库。

然后在dataHost中配置,tfp数据库所在的所有真实mysql数据库实例列表,即一主两从的3个数据库实例

4. 启动测试

启动mycat,然后进入客户端进行操作增删改查

mysql -umycat -p -P8066 -h127.0.0.1
show databases;
use mycatdb;
show tables;

当执行show databases;命令时可以看出来,它里面存放的其实就是mycatdb这个逻辑数据库。

这里还有一个问题:

如果进行正常的操作增删改查,其实看不出来到底是不是读写分离了,因为3个数据库的数据始终是一样的。

做法:可以对两个slaver从数据库中的user表中的数据进行略微的修改(不要进行增删操作,否则可能会出问题),比如修改一条记录的值。最后进行查找操作,查看数据是从哪个数据库中查出来的。

使用navicat连接bug:

使用navicat 12连接mycat时提示表不存在,

解决方案:使用低版本的navicat

5. java代码实现读写分离

使用springboot +mybatis的方式连接mycat进行读写分离

源码地址:https://gitee.com/tfp-study/mycat-read-write-split

其实和普通的项目没有什么区别,该怎么做还是怎么做,只是修改一下数据库连接时的url,username,password

遇到一个bug,启动报错:

java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required

解决办法:
将数据库连接版本降低成5.1.37


	mysql
	mysql-connector-java
	5.1.37
	runtime
驱动使用:spring.datasource.driver-class-name=com.mysql.jdbc.Driver即可

 

 

你可能感兴趣的:(mycat 实现读写分离)