使用mycat实现mysql的读写分离

一、前言

    一直对mysql的读写分离很感兴趣,但是公司的项目规模比较小,一直没有这种机会,最近自己捣鼓了一下,特此记录一下。

     这里说一下简答mycat,mycat的是一款数据库中间件,功能比较强大,可以支持数据库的分库分表等等很多功能,感兴趣的的可以自行去学习,这里主要用到了最基础的读写分离的功能。

    这里要特地提一下,读写分离的前提是mysql的主从复制是自己配置,mycat只负责读写分离的,并不支持主从复制的配置。我采用了比较新的GTID的方式来配置主从复制,我转载了我当时参考的一篇文章,感兴趣的可以自行尝试,链接如下:

https://blog.youkuaiyun.com/wuqingbin/article/details/79918409

    另外,读写分离需要多个数据库,如果没有多台服务器的情况下,可以采用docker的方式,在一台服务器上配置多个mysql服务,我个人就是采取这种方式。但是docker我也是初学,在此就不多做介绍,很好的东西,推荐学习。

配置环境:

1、centos5.7 
2、mysql 5.7.19 
3、Mycat 1.6


二、mysql准备

     我这里准备了两个mysql服务,同时也配置好了主从复制

mysql1(master):192.168.1.100:3308 root/123456

mysql2(slave):192.168.1.100:3309 root/123456

以为是采用docke在同一台centos上面配置的,所以ip一样

三、mycat 安装

 1、到mycat的官网下载适合自己的版本,上面也有教程,简单安装还是非常简单的。这里我下载的版本是:

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

 2、将文件复制到  /usr/local 目录下,解压

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

使用mv命令,将解压后的文件夹改名为Mycat

3、配置mycat环境变量

vi /etc/profile,在系统环境发量文件中增加 MYCAT_HOME=/usr/local/Mycat

执行 source /etc/profile 命介,使环境发量生效

四、mycat配置

  1、  截止都第三步,mycat安装成功,但是还没有启动。我们要先配置mycat的用户。

vim /usr/local/Mycat/conf/server.xml

server.xml主要是用来配置mycat的基本信息,可以不做改变,我的server.xml的内容如下,主要看一下用户部分

 <user name="root">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>  
        </user>

        <user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user>

这里配置了两个用户root和user,mycat默认的数据端口是8066,大家可以采用平时连接mysql的方式来连接mycat

2、配置schema.xml ,这个文件的配置非常重要,可以说是mycat最核心的配置

vim /usr/local/Mycat/conf/schema.xml
下面是我完整的 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="employee" primaryKey="ID" dataNode="dn1" />  
	</schema>
	 
	<dataNode name="dn1" dataHost="localhost1" database="d1" />
	 
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat> 
                <writeHost host="hostM1" url="192.168.1.100:3308" user="root" password="123456">  
		 <readHost host="hostS1" url="192.168.1.100:3309" user="root" password="123456" />
		</writeHost> 
		 
	</dataHost> 
</mycat:schema>

从上到下解读:

1、schema标签,对应的是server.xml中的user下的schema属性

2、table标签,很好理解,就是控制的表,目前我理解的是,没控制一张表,都要在这里配置,其中dataNode属性与下面的dataNode标签对应,可以输入多个,用逗号隔开,用作分库。目前没有这个需求,所以就只写了一个

3、dataNode标签,数据节点标签,dataHost属性与下面的dataHost标签相对应,database属性,代表的是指向具体哪个数据库

4、dataHost标签,字面上表示是数据主机,这里重点说一个balance表情,设置成1,读写分离才能生效,默认为0

5、writehost标签,用来表示具体的写入数据库

6、readhost标签,用来表示具体的读数据库

这里只是大概描述,详细配置及说明的请参考mycat的权威指南,写的非常清楚。

五、mycat启动

进入/usr/local/Mycat/bin

./mycat start

可以试用ps -ef|grep mycat 来看一下mycat是否启动成功。

命令行登陆mycat

mysql -h127.0.0.1 -uroot -p123456 -P8066

六、关于测试

个人建议可以先停掉mysql的主从复制,在保证mysql1和mysql1两个数据库内employee表的表结构相同的情况下,手动修改两个表的数据,显示出差异性。然后通过mycat的链接,来进行读取和写入employee,分别观察mysql1和mysql1的数据变化,来确定读写分离是否起作用了。

不是太擅长写博客,写的比较粗略,仅作记录,有感兴趣的小伙伴可以给我留言,相互学习。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值