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

在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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值