零、说在前面
先吐个槽,这点东西折腾了我四五天,最后还是一条告警拯救了我,下面进入正文
看了几个MySQL的读写分离的中间件,貌似这个是比较流行的一个,虽然我不是BAT的粉丝,但是有好用的也可以拿过来用用
这东西的介绍我就不多说了,感兴趣的诸位可以去它的官网看看,而且它上面有简易文档提供下载,大家请自行阅读吧
本系列的各篇链接如下
| 编号 | 标题 |
| 1、 | (一)-- 操作系统安装篇 |
| 2、 | (二)-- 数据库安装篇 |
| 3、 | (三)-- 主从设置 |
| 4、 | (四)-- MyCat读写分离 |
| 5、 | (五)-- MyCat配置详解 |
一、规划
1:在原有的21服务器上,部署Mycat
| 主机名 | IP | CPU | 内存 | 用途 | 备注 |
| centos7One | 192.168.122.21 | 2 | 4 | 主/写 | Mysql/Redis/Mycat |
| centos7Two | 192.168.122.22 | 1 | 2 | 从/读 | Mysql/Redis |
| centos7Three | 192.168.122.23 | 1 | 2 | 从/读 | Mysql/Redis(暂空) |
令21作为写服务器,22作为读服务器存在。23暂时不用
二、下载安装
既然操作系统都是Centos7了,那么jdk起码也得1.8才像话吧。二话不说下载安装
jdk1.8下载地址 我下的是gz压缩包
具体过程不细说了,下载后,解压,然后修改/etc/profile文件,添加以下内容
#设置java的环境变量
JAVA_HOME=/usr/local/jdk1.8
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
然后source /etc/profile就可以让环境变量生效
再执行java -version,如果可以成功看到java的版本信息,那么你的java环境就配置成功了。否则。。重启试试吧。。
但是我的1.8jdk有问题了,没有解决,所以改成1.7版本的jdk
2:安装Mycat
同理,这个我也是下载的gz格式的压缩包,将压缩包放到/usr/local路径下,解压缩
得到一个名为“mycat”的文件夹,如下图所示

然后修改/etc/profile文件,在最后面加上这样如下内容
#设置mycat的目录
export MYCAT_HOME=/usr/local/mycat 然后source /etc/profile使配置生效。
三、修改配置
仅仅上面的程度不算完,还需要修改两个重要的配置文件 server.xml和schema.xml
前者之中,只需要添加用户即可,其他配置我暂时没做任何修改
后者需要根据你的需要(比如是分片还是读写分离)来配置
其他暂时无用的内容可以不用管,下面是我的样例
server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">true</property>
</system>
<user name="root"> <!-- 这里的账号和密码与你的数据库的一致即可 -->
<property name="password">987654</property>
<property name="schemas">TESTDB</property> <!-- 这里的TESTDB的名字可以随意写,只需与schema.xml中的一致即可 -->
</user>
</mycat:server>
schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 这里的name属性的值TESTDB与上面server.xml中的一致即可,
sqlMaxLimit属性代表每次只查询前n条符合条件的记录,避免全表扫描 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- 下面名叫“t_a1”的表是在我的库中真实存在的一个表,
同时,下面的dataNode属性的值对应的是下面dataNode标签的name属性的值 -->
<table name="t_a1" primaryKey="ID" type="global" dataNode="dn1" />
</schema>
<!-- dataNode标签的主要作用是指明对哪一个数据库进行操作和管理,
其中的dataHost属性对应的下面dataHost标签的name属性的值 -->
<dataNode name="dn1" dataHost="localhost1" database="xxtest" />
<!-- 下面的localhost1的名字是随便取的,balance=1表示读写分离、
writeType=0表示写操作集中到第一个写数据库
switchType=1代表自动切换 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 检测心跳的方法,可以用下面的语句,也可以用其他的 -->
<heartbeat>select user()</heartbeat>
<!-- 下面是读和写的mysql的ip和端口,以及登录的账号和密码。 -->
<writeHost host="hostM1" url="192.168.122.21:3306" user="root" password="987654">
<readHost host="hostS2" url="192.168.122.22:3306" user="root" password="987654" />
</writeHost>
</dataHost>
</mycat:schema>
一般来说,配置写成上面的样子,应该就可以启动起来mycat了。
为了方便对比,我把我的数据库的情况也放上来,大家对比一下就更容易明白了

四、启动
配置无误,启动一下看看,如果看到类似下面的截图,说明你成功了

初始化十个线程,success了10个,成功!
五、最后
还有一些配置上的说明和我遇到的问题,会在后面单独拿出来讲

本文详细介绍了使用Mycat实现MySQL读写分离的过程,包括环境搭建、配置修改及启动验证等关键步骤。
5297

被折叠的 条评论
为什么被折叠?



