Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。
1、通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。
2、实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我们需要部署多主多从的模式
分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分
根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面
按照不同的表来拆分分到不同的数据库服务器之上,根据表的类型不同来拆分
1、要将Mycat准备好可以去官网下载 http://www.mycat.org.cn/
2、需要两台或者两台以上的服务器或者虚拟机
3、保证每台服务器上已经安装好了mysql并且主从复制已经搭建完成
主从复制搭建可以参考这里:https://blog.csdn.net/qq_45334037/article/details/118708689
主服务器ip:176.20.92.71
从服务器ip:176.20.92.73
Mycat版本:1.6.7.1
MySQL版本:5.7.18
Linux版本:centos7
1、Mycat解压即用
将Mycat解压到/usr/local目录下
2、启动Mycat 需要切换到Mycat中的bin目录下
./mycat start
3、登录mycat 需要进入mysql中的bin目录下
./mysql -umycat -p -P8066 -h127.0.0.1
4、Mycat的关闭
./mycat stop
只需设置连接mycat时的用户名和密码, 逻辑库即可,将默认的修改为你想要的
<user name="mycat" defaultAccount="true">
<property name="password">123456property>
<property name="schemas">mycatdbproperty>
user>
因为只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,写转发到主库,读转发到从库,所以schema标签里面不用配置table
配置如下
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
schema>
dataNode标签的作用
dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库
配置如下
<dataNode name="dn1" dataHost="host1" database="testdb" />
name属性:定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到
dataHost属性:用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性
database属性:用于对应真实的数据库名,必须是真实存在的
dataHost标签的作用
定义具体的数据库实例、读写分离配置和心跳语句
配置如下
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
writeHost>
dataHost>
balance属性:负载均衡类型,目前的取值有4种
switchType属性:用于指定主服务器发生故障后的切换类型
heartbeat标签:用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行
writeHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,写实例
readHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,读实例
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去
DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
writeHost>
dataHost>
mycat:schema>
在此我们的mycat读写分离配置就全部完成了,重启mycat进行测试
在mycat中的逻辑数据库mycatdb的t_user表中插入数据 可以发现主从数据库都被插入了数据
在mycat中查询t_user中的数据
到此mycat读写分离的搭建和测试就全部完成了