MYSQ主从复制(一主两从)+mycat读写分离

it2022-05-05  157

在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受。

在这里,我用三个实例组成MySQL主从集群,来验证MyCAT的读写分离功能。

Mysql主从复制:

https://blog.csdn.net/qq_16171815/article/details/96300490

Mycat读写分离

1、下载mycat

官网下载地址:http://www.mycat.org.cn/

下载完之后,解压到本地

2、配置文件

进入到conf文件夹,配置schema.xml,server.xml两个文件

打开schema.xml文件,去掉一些繁杂的配置,读写分离只需要下列配置:

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!--【name】属性:mycat实例,与server.xml配置相同--> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema> <!--【database】属性:真实的数据库--> <dataNode name="dn1" dataHost="localhost1" database="mycat_test" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat><!--mycat的心跳--> <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root"><!--写服务器篇配置--> <readHost host="hostS1" url="192.168.127.129:3306" user="root" password="root" /><!--读服务器篇配置--> <readHost host="hostS2" url="192.168.127.130:3306" user="root" password="root" /><!--读服务器篇配置--> </writeHost> </dataHost> </mycat:schema>

打开server.xml,去掉一些繁杂的配置,读写分离只需要下列配置:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://io.mycat/"> <system> <property name="useSqlStat">1</property> <!-- 1为开启实时统计、0为关闭 --> </system> <!--mycat用户节点,schema要与schema.xml一致--> <user name="mycat"> <property name="password">mycat</property> <property name="schemas">TESTDB</property> </user> <user name="read"> <property name="password">read</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property><!--是否只读--> </user> </mycat:server>

3、启动mycat

进入到bin目录下,进入窗口模式,

先install mycat:mycat.bat install

启动mycat:mycat.bat start

其他命令

重启:mycat.bat restart

停止:mycat.bat stop

 

4、验证mycat读写分离

通过mysql连接工具,我这里是sqlyog,连接mycat,用户名和密码就是刚才server.xml文件配置的

 连接成功之后,会发现有一个数据库实例,和一张表,TESTDB就是server.xml和schema.xml配置相同的地方

刚好和需要读写分离的库吻合

我们现将mysql主从复制的表中数据都删除

说明:主服务器是本机(localhost),两个从机分别是(192.168.127.129和192.168.127.130)

mycat中也没有数据

下面通过mycat插入数据

插入成功,看下数据,一主两从都有数据

因为是主从复制,只有通过主服务器插入数据,从服务器才有更新数据,所以肯定是写是在主服务器

下面验证读,我们在两个从服务器中各插入一条数据,这样主服务器是不会更新数据的

可以看到读出来的数据,和主库数据不同

5、问题总结

搭建的过程中,遇到各种问题,绝大部分都是server.xml和schema.xml文件配置错误,这两个文件的配置网上很多,这里不做叙述,各个节点的解释和含义,网上也很多


最新回复(0)