一、安装Mycat
这里我把mycat安装到我的数据库主机所在的服务器上,也就是192.168.2.124这台机器,这是
linux下我就直接进入到local目录用wget下载了:
cd /usr/local
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
你看,我的mycat文件夹里面已经下载下来了
tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
解压过后就会得到一个mycat文件夹,这样mycat就安装好了。进入这个文件夹吧,就是这样的:
二、配置Mycat
进入到conf
目录下,里面就是一堆配置文件,图中框出来的三个文件是我们主要需要配置的
-
schema.xml 定义逻辑库,表、分片节点等内容
-
rule.xml 定义分片规则
-
server.xml 定义用户以及系统相关变量,如端口等
首先我们修改server.xml
vim server.xml
拉到这个文件的最下面,对这几行进行修改就行了:
改为:
<user name="mycat"> # 连接mycat数据库的用户名为mycat
<property name="password">123456</property> # 连接mycat数据库的密码为123456
<property name="schemas">TESTDB</property> # 创建一个逻辑数据库,名为TESTDB
</user>
完了过后顺便把上图中红框下面那个<user>标签那6行配置给删了。
最后就是这样,记住你设置的用户名和密码:
然后我们修改schema.xml
改成这样就行了:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 名为TESTDB的逻辑数据库对应的节点名为dn1 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- 名为dn1的节点对应的dataHost为host1,对应的mysql上的物理数据库为testdb -->
<dataNode name="dn1" dataHost="host1" database="testdb" />
<!-- 名为host1的dataHost的相关配置 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心电感应 -->
<heartbeat>select user()</heartbeat>
<!-- 当前dataHost的写主机,可以有多个写主机 -->
<writeHost host="hostM1" url="192.168.2.124:3306" user="root" password="********">
<!-- 与这个写主机对应的读主机,可以有多个读主机 -->
<readHost host="hostS1" url="192.168.2.173:3306" user="root" password="********" />
</writeHost>
</dataHost>
</mycat:schema>
下面就是我机器上实际的样子:
mysql -uroot -p你物理数据库的密码 -h 192.168.2.124 -P 3306
mysql -uroot -p你物理数据库的密码 -h 192.168.2.173 -P 3306
注意,后面那个-P,P是大写的P
如果远程访问出错的话,有可能是没有开启远程访问权限,开启的方法是,通过无法访问的那台主机的命令行工具进入到mysql的命令行界面,然后执行以下命令:
grant all privileges on *.* to root@'无法访问的IP' identified by '物理数据库密码';
flush privileges;
然后应该就都能够远程连接了。
三、启动Mycat
进入到mycat的bin目录下,执行:
./mycat start
我的代码示例,可以看出,mycat已经启动成功了:
然后我们就要登陆到mycat去看看了:
mysql -umycat -p123456 -P8066 -h 192.168.2.124
# 我之前设置的mycat用户名就是mycat,密码是123456,所以上面的代码就能进入到我的mycat服务器
下面是我的真实代码示例,可以看出,成功进入mycat的命令行界面,跟mysql没有啥区别:
然后我进入之前创建的TESTDB逻辑库,由于这个逻辑库对应的物理库是testdb,而这个库里面有一张user表,那我就不客气了,直接插入一条数据试试:
insert into user values (3,@@hostname);
你看数据插入成功了,这条sql的神奇之处就是,它会在我的写主机和读主机上插入不同的数据,接下来我们用navicat来看看到底有没有数据:
很神奇,数据插入成功了,而且正如我所说,两台物理数据库的值是不一样的,你看看id为3的两条数据是不是不一样。
四、验证读写分离
还记得上面我的schema.xml配置文件吗?里面有一个参数叫balance,我设置的值是2(表示所有读操作都随机的在 writeHost、readhost 上分发。),这就是控制负载均衡的类型的:
负载均衡类型的值有4种:
balance="0" # 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance="1" # 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
balance="2" # 所有读操作都随机的在 writeHost、readhost 上分发。
balance="3" # 所有读请求随机的分发到 readhost 执行,writeHost 不负担读压力。
接下来我就在mycat的命令行来读取一下数据试试,看看读操作到底是不是数据从writeHost、readhost 上分发的:
事实证明是对的,我两次读出来的数据不一样,来自两台物理数据库,读写分离搭建成功了。
当然我设置balance=2是为了验证读写分离,正常生产环境一主一从的话一般设置balance=3。
文章评论