Linux mycat安装以及通过mycat实现读写分离(基于Mysql主从复制)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liboyang71/article/details/80158369

继上篇文章,我们继续来说如何使用mycat进行读写分离,当然实现读写分离的前提是你已经配置好了mysql的主从复制,如果还有没弄好主从复制的同学,可以通过文章 Linux 关于mysql配置主从复制(为后期使用mycat进行读写分离进行准备) 来进行学习和配置。好了,我们直入主题

1.描述

首先来描述一下什么是读写分离,就和他的名字一样,读写分离当然就是读操作和写操作分开使用不同的数据库来执行,因此此时我们能想的方案有两套。


第一种方案: 我们可以通过代码上来根据业务逻辑去做判断,实现分库,然后选择不同的库来分别执行我的读和写操作,但是这样做的弊端有很多,首先我们项目需要实现分库,对于单体项目来说分库需要做特殊配置,包括一定的代码侵入,其次本来根据业务来选择库源也是对代码的一种侵入,所以当时我就直接pass了这种方案。
第二种方案: 也就是我们今天的主题了。我们来通过mycat来实现读写分离,这样,对于开发人员而言他还是连接了一个数据库(以为是mysql的mycat中间件),而且也不需要根据不同业务来选择不同的库,这样就不会有多余的代码产生。


好了 上面为大家分析了两种方案的利弊(个人见解),废话不多说,我们开始mycat的融入。

2.mycat安装

2.1 安装流程

安装Java环境(mycat基于java) —> 下载mycat —> 新建mycat用户 —> 解压mycat —> 配置环境变量 —> 启动mycat

2.2 安装命令

# 安装java环境
yum -y install java-1.8.0-openjdk*
# 下载mycat
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
# 解压
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
# 剪切到/usr/local下
mv mycat /usr/local/
# 创建专门运行mycat账号
adduser mycat
# 切换到mycat文件夹路径下
cd /usr/local
# 将文件权限赋给mycat账号
chown mycat:mycat -R mycat
#配置环境变量添加 export JAVA_HOME=/usr export MYCAT_HOME=/usr/local/mycat(如下图所示)
vi /etc/profile

这里写图片描述

# 刷新文件
source /etc/profile
# 切换mycat用户
su mycat
#切换目录
cd /usr/local/mycat/bin/
#启动mycat
./mycat start

好了 mycat安装告一段落,接下来我们要配置mycat的读写分离。

3.配置mycat的读写分离

3.1目录结构

在讲述如何具体配置读写分离之间,先为各位同学说明一下目录接口以及各文件的作用方便各位同学理解,本人以图片的形式展现给各位同学,方便各位同学学习。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.2配置读写分离

#进入配置文件
vi /usr/local/mycat/conf/schema.xml

最终配置如下,我会在配置图中解释每个配置的作用以及会将最后配置贴出来供各位同学直接使用
这里写图片描述
这里写图片描述

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="COPYDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>

        <dataNode name="dn1" dataHost="node1" database="copy" />

        <dataHost name="node1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="58.87.75.119" url="58.87.75.119:3306" user="root"
                                   password="你的密码">
                        <!-- can have multi read hosts -->
                        <readHost host="120.79.178.246" url="120.79.178.246:3306" user="root" password="你的密码" />
                </writeHost>
                <writeHost host="120.79.178.246" url="120.79.178.246:3306" user="root"
                                   password="你的密码" />
        </dataHost>
</mycat:schema>

好了 读写分离配置完成, 接下来我们来配置一下mycat的账号密码

#打开server配置
vi /usr/local/mycat/conf/server.xml

这里写图片描述
这里写图片描述

因为我们现在只要做读写分离,所以配置完成了,现在我们重启mycat

#切换路径
cd /usr/local/mycat/bin
#重启
./mycat restart

好了 我们来连接一下看一下效果,最终效果如下图所示
这里写图片描述
这里写图片描述
这里写图片描述
大功告成,我刻意将主从数据库的数据做了一些区别,所以你会发现当你插入数据的时候是插入到master mysql,之后因为之前配置好了主从复制,所以两个数据库数据时同步的,然后当你读取数据的时候是读取的slave的数据,所以读写分离完成,当然如果你不确定,也可以从我刚才介绍的日志目录中看到具体连接的那个数据库。
项目开发中,我们只需要将mysql的连接地址换成mycat的地址即可,无需任何其余操作,更不会造成多余的业务逻辑,这样,我们基于mycat的读写分离算是大功告成啦!

猜你喜欢

转载自blog.csdn.net/liboyang71/article/details/80158369