mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),要求jdk必须是7以上的版本。
下载部署jdk
wget https://download.oracle.com/java/19/latest/jdk-19_linux-x64_bin.rpm
rpm -ivh jdk-19_linux-x64_bin.rpm
#如果不知道jdk文件解压到去了
rpm -ql jdk-19-2000:19.0.2-7.x86_64
创建java目录,并把文件移动到该目录下:
mkdir /usr/local/java
mv /usr/lib/jvm/jdk-19-oracle-x64 /usr/local/java/
配置环境变量:
[root@mycat ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java/jdk-19-oracle-x64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
使环境变量生效
source /etc/profile.d/java.sh
检查下载是否成功:
java -version
![](https://i-blog.csdnimg.cn/blog_migrate/58e44b9c1ea3b36442202b3bc39ff391.png)
下载Mycat:
#下载
wget http://dl.mycat.org.cn/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
#解压
tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
认识配置文件
MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:
/usr/local/mycat/conf/schema.xml 定义逻辑库,表、分片节点等内容。
/usr/local/mycat/conf/server.xml 定义用户以及系统相关变量,如端口等。
![](https://i-blog.csdnimg.cn/blog_migrate/f6d6bf05a787491172047503508db0e9.png)
实操:
192.168.200.186 mysql主服务器
192.168.200.187 mysql从服务器
192.168.200.174 mycat中间件
192.168.200.175 客户端
在两个mysql的做好了主从配置的基础上,通过配置mycat实现读写分离
![](https://i-blog.csdnimg.cn/blog_migrate/1e6764eed84955b2bbbfce974e043e1d.png)
配置server.xml
![](https://i-blog.csdnimg.cn/blog_migrate/e37eb2108521f3bc5156b73f1e1f423f.png)
配置schema.xml文件:
![](https://i-blog.csdnimg.cn/blog_migrate/5879b49235047bdd212ac394056a63ae.png)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 一套配置的开始 -->
<!--定义 虚拟库(mycat用户名密码) 和 数据节点(datanode) 的关联关系 -->
<schema name="mycat_db"
checkSQLschema="false"
sqlMaxLimit="100"
dataNode="yanhuo">
<!--这里定义的是分库分表的信息-->
</schema>
<!--数据节点 主要说两个事情: 主机组(怎么链接真实的mysql主从)、定义真实库 -->
<dataNode name="yanhuo"
dataHost="aa" database="text" />
<dataHost name="aa"
maxCon="1000" minCon="10"
balance="0"
writeType="0"
dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat> <!--心跳检测,保证mysql主从存活 -->
<!-- can have multi write hosts -->
<writeHost host="server" url="192.168.200.186:3306"
user="root" password="GZgz2301..">
<!-- can have multi read hosts -->
<readHost host="client" url="192.168.200.187:3306"
user="root" password="GZgz2301.." />
</writeHost>
</dataHost>
<!-- 一套配置的结束 -->
</mycat:schema>
启动mycat服务:
/usr/local/mycat/bin/mycat start
查看: //如果没有看见这两个进程起来,说明mycat启动失败
![](https://i-blog.csdnimg.cn/blog_migrate/905a59d259e0a5ec7fec80eb223769e6.png)
这个是服务使用的端口号
![](https://i-blog.csdnimg.cn/blog_migrate/ba9c48341370e078912b004f2ed454bc.png)
主服务器授权:
grant all on 数据库名.* to 用户名@'%' identified by '密码';
flush privileges;
测试:
测试mycat能不能成功登陆到两台mysql服务器
mysql -uroot -p'GZgz2301..' -h192.168.200.186 #登陆主服务器
mysql -uroot -p'GZgz2301..' -h192.168.200.187 #登陆从服务器
客户端能不能登陆到mycat
mysql -h192.168.200.174 -P8066 -ututu -p123456
客户端通过不同的账户密码登陆,能不能实现读写分离;
# 登陆读写用户
mysql -h192.168.200.174 -P8066 -ututu -p123456
登陆制度用户
mysql -h192.168.200.174 -P8066 -uuser -puser