前言
此次搭建MyCat2读写分离使用的Linux环境是Debian11.3,使用的mysql版本是8.0.16
![在这里插入图片描述](https://img-blog.csdnimg.cn/36869213621045809a12e7fd37cc3e20.png)
1. 准备三台服务器
准备如下三台Debian服务器,而且这三台服务器之间能够相互通信,可以用ping命令测试,如下图所示,表示三台服务器之间通信正常,执行vim /etc/hostname命令修改162和163两台服务器的主机名分别为debian162,debian163,分别执行init 6重启,重启之后162和163的主机名分别为debian162,debian163,这个后面会用到,便于后面区分。
192.168.227.161 安装MyCat2
192.168.227.162 mysql主机,mysql8.0.16已安装
192.168.227.163 mysql从机,mysql8.0.16已安装
192.168.227.161 ping通 192.168.227.162和192.168.227.163
![在这里插入图片描述](https://img-blog.csdnimg.cn/1914b68ab15c47c2852fac2a1d4ee63f.png)
192.168.227.162 ping通 192.168.227.163和192.168.227.161
![在这里插入图片描述](https://img-blog.csdnimg.cn/27a381d62f994c23968f48ddf88732dd.png)
192.168.227.163 ping通 192.168.227.162和192.168.227.161
![在这里插入图片描述](https://img-blog.csdnimg.cn/a88375421b584d5a80a18421659cee72.png)
192.168.227.162和192.168.227.163已安装mysql8.0.16
![在这里插入图片描述](https://img-blog.csdnimg.cn/edffacf12f4b4919a21d46032674880a.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ee7e0d2737c8486ebfab54b1e92104b7.png)
2. 搭建MySQL主从复制
(1)修改主机MySQL的配置文件my.cnf,并执行/etc/init.d/mysql restart命令重启mysql服务,我这里mysql启动文件是放在/etc/init.d目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/7c1e4814efb140c9957e21a870d68e12.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/81fddc6ed95d4a6d90735be6d1bb98ce.png)
(2)修改从机MySQL的配置文件my.cnf,并执行/etc/init.d/mysql restart命令重启mysql服务,我这里mysql启动文件是放在/etc/init.d目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/c5d2463722f5492ba589e25918889a77.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7067eb7700cd4756942cbc78e572a87a.png)
(3)进入主机mysql中执行授权
grant replication slave on *.* to 'root'@'%';
![在这里插入图片描述](https://img-blog.csdnimg.cn/dedd9d5ed47c4d17bd5221cb9cc1b9b4.png)
(4)给mysql从机配置mysql主机
在Mysql主机登录mysql,执行show master status查询主机MySQL的File和Position参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/b81b69b2e8b748f1b7eb597efd32bd54.png)
然后登录从机mysql,执行以下命令
CHANGE MASTER TO
MASTER_HOST='192.168.227.162',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456',
master_log_file='mysql-bin.000001',
master_log_pos=375;
![在这里插入图片描述](https://img-blog.csdnimg.cn/191b28195f3f43d2855a142d1075dd96.png)
(5)登录MySQL从机,执行start slave启动主从复制,执行show slave status\G查看,如下图所示主从复制启动成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/1d55c186b659460ab920e87a3cce1b68.png)
3. 安装并启动MyCat2
将Mycat2的安装压缩包上传至/opt目录下
mycat2-1.21-release-jar-with-dependencies.jar
mycat2-install-template-1.21.zip
首先执行unzip mycat2-install-template-1.21.zip 完成解压,然后将mycat2-1.21-release-jar-with-dependencies.jar移动到解压的mycat/lib目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2f9f1cd523a43a49bb3e6eae45d55b1.png)
修改mycat/conf/datasources目录下的prototypeDs.datasource.json配置文件,修改内容如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/06762881a12645e7831ee078a8b07e84.png)
修改mycat/bin目录下的文件权限,否则会拒绝执行
chmod 755 ./*
![在这里插入图片描述](https://img-blog.csdnimg.cn/976fc5f3db30405fb5e338fdf57bd191.png)
进入到mycat/bin目录下执行./mycat start启动mycat,执行./mycat status查看启动状态,执行tail -f /opt/mycat/wrapper.log查看启动日志,如下表示启动成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1bc6bcbf5b59431c98a31b315c63ee76.png)
用navicat登录mycat,和登录mysq一样,只是端口不一样,如下图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/7c2f2976575843f3845d6b1bec456ea4.png)
成功创建数据库mydb1
![在这里插入图片描述](https://img-blog.csdnimg.cn/d5a1d519394d42948de408ca84939c1f.png)
登录主机mysql和从机mysql看看
![在这里插入图片描述](https://img-blog.csdnimg.cn/cbf8dc0bf7e340e0ad9a2299b75136a8.png)
4. 添加读写分离配置
(1) 第一种方式:使用注解添加读写分离配置
创建
/*+ mycat:createDataSource{"name":"rwSepw", "url":"jdbc:mysql://192.168.227.162:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "password":"123456"} */
/*+ mycat:createDataSource{"name":"rwSepr", "url":"jdbc:mysql://192.168.227.163:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "password":"123456"} */
查询
/*+ mycat:showDataSources{} */
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c7a1bef9397420da45ea7b95bfa5fa3.png)
或者是第二种方式直接编辑配置文件来添加读写分离配置
编辑rwSepw.datasource.json文件,添加如下内容
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"logAbandoned":true,
"maxCon":1000,
"maxConnectTimeout":30000,
"maxRetryCount":5,
"minCon":1,
"name":"rwSepw",
"password":"123456",
"queryTimeout":0,
"removeAbandoned":false,
"removeAbandonedTimeoutSecond":180,
"type":"JDBC",
"url":"jdbc:mysql://192.168.227.162:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
"user":"root",
"weight":0
}
编辑rwSepr.datasource.json文件,添加如下内容
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"logAbandoned":true,
"maxCon":1000,
"maxConnectTimeout":30000,
"maxRetryCount":5,
"minCon":1,
"name":"rwSepr",
"password":"123456",
"queryTimeout":0,
"removeAbandoned":false,
"removeAbandonedTimeoutSecond":180,
"type":"JDBC",
"url":"jdbc:mysql://192.168.227.163:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
"user":"root",
"weight":0
}
效果和使用注解添加一样
(2) 使用注解添加集群配置
第一种
创建
/*+ mycat:createCluster{"name":"prototype", "masters":["rwSepw"], "replicas":["rwSepr"]} */
查看
/*+ mycat:showClusters{} */
或者是修改/opt/mycat/conf/clusters/prototype.cluster.json,添加如下内容
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetryCount":3,
"minSwitchTimeInterval":300,
"showLog":false,
"slaveThreshold":0.0
},
"masters":[
"rwSepw"
],
"maxCon":2000,
"name":"prototype",
"readBalanceType":"BALANCE_ALL",
"replicas":[
"rwSepr"
],
"switchType":"SWITCH"
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/6e7041969983427b938246b272832577.png)
最后重启mycat
cd /opt/mycat/bin
./mycat restart
![在这里插入图片描述](https://img-blog.csdnimg.cn/325261f4401e44a89f68dc5666622934.png)
5. 测试MyCat2读写分离
我们可以这样测试:
首先创建一张test表
create table test(
id int,
hostname varchar(20)
);
在mycat执行SQL语句 insert into test(id, hostname) values(1, @@hostname);
在mysql从机执行SQL语句 insert into test(id, hostname) values(2, @@hostname);
最后在mycat执行select * from test;查看结果如下
第一次查询结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/16e9ec6f38ae41ccbbe3b1f2dc7d359d.png)
第二次查询结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/422ac54e3de140438ccd1c503ac65256.png)
从上面结果可以看到已经实现了读写分离。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)