java常用服务集群搭建【5】mycat屏蔽主从同步
上一篇文章,我们基于mysql的读写分离完成了主从同步,但这样的主从同步有一个缺陷,程序员需要记录哪些机子提供增删改服务,哪些机子提供查询服务,如此一来就会形成硬编码。能不能使得程序员集中精力于业务,逻辑上只有一个mysql服务,但物理上却又多个mysql服务;能不能屏蔽复杂性却提升性能,mycat便应运而生,它的一个重要功能就是以读写分离为基础,统一多个mysql服务于一个。本文将阐述如何使用mycat做到这一点。
1、前提约束:
- mysql已经配置好主从同步,相互能够访问【关闭防火墙并且允许远程访问】mysql服务 https://www.jianshu.com/p/11e33eb2c7d7
- jdk已经安装到win10 https://www.jianshu.com/p/2d60d5f7ba46
作者使用的是windows版本,即window10中安装mycat,两个centos7虚拟机中分别安装mysql主【192.168.100.134】从【192.168.100.136】服务。
2、软件下载:
百度网盘
链接:https://pan.baidu.com/s/1APUIuLnU7G2J5K2tpCW5Iw
提取码:jtg6
3、解压Mycat-server-1.6.6.1-release-20181031195535-win.tar.gz到C:\Program Files\mycat
4、查看C:\Program Files\mycat\conf\server.xml
在这个文件的最下面有如下默认内容:
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
即有两个账号,一个是root/123456,另外一个是user/user,对应的数据库实例就是TESTDB,而这个TESTDB就是真正的mysql实例映射而成的。
5、修改C:\Program Files\mycat\conf\schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t1" primaryKey="id" dataNode="dn1"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="0" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="192.168.100.134" url="192.168.100.134:3306" user="root"
password="zhangli">
<readHost host="192.168.100.136" url="192.168.100.136:3306" user="root" password="zhangli" />
</writeHost>
</dataHost>
</mycat:schema>
5、启动测试
打开命令行,进入C:\Program Files\mycat\bin,执行mycat.bat start,即可启动,注意mycat默认端口为8066。
- 在134主机命令行,执行以下命令:
mysql -uroot -pzhangli;#进入mysql命令行
create database db01;
use db01;
create table t1(id int,name varchar(20));
- 在136从机命令行,执行以下命令:
mysql -uroot -pzhangli;#进入mysql命令行
show database;#我们看到了db01已经同步过来
use db01;
show tables;#我们看到t1也已经同步过来
- 在win10命令行,在C:\Program Files\mycat\bin路径执行以下命令:
mysql -uroot -p123456 -P8066 #注意,一定要跟上端口,要不然就会登录到mysql服务而非mycat
show databases; #我们看到有一个逻辑数据库TESTDB
use TESTDB;
show tables;#我们看到了t1
use t1;
insert into t1(id,name) varchar(1,'ali');
insert into t1(id,name) varchar(2,'zhangli');
select * from t1;
此时,再回到从机命令行,查询t1,也能看到刚才通过mycat插入的两条记录。
在mycat中插入,在从机中查询
在使用了mycat以后,开发人员只需要记住mycat的ip,端口以及数据库实例,但实际上却完成了读写分离,提高了开发效率,也提升了数据库性能。