mycat 后期mysql服务器_用Mycat实现MySQL服务器一主一从的读写分离

在另外一篇文章,我保姆般的讲解了MySQL数据库搭建主从复制,现在我需要让我192.168.2.124上的MySQL主机来对外承担写入数据的任务,让我192.168.2.173上的MySQL从机来对外承担读取数据的任务,我用数据库中间件Mycat来实现这个功能。

一、安装Mycat

这里我把mycat安装到我的数据库主机所在的服务器上,也就是192.168.2.124这台机器,这是

linux下我就直接进入到local目录用wget下载了:

cd /usr/localwget 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文件夹里面已经下载下来了

13820409702e9122f0734db4e6a33ed9.png

然后解压到当前文件夹:

tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

解压过后就会得到一个mycat文件夹,这样mycat就安装好了。进入这个文件夹吧,就是这样的:

28d6a6c9be0af6d7e91bcb7fb34000e8.png

二、配置Mycat

进入到conf目录下,里面就是一堆配置文件,图中框出来的三个文件是我们主要需要配置的

35156b9a26a24cbae8cb9f58906ff594.png

schema.xml         定义逻辑库,表、分片节点等内容

rule.xml                定义分片规则

server.xml            定义用户以及系统相关变量,如端口等

首先我们修改server.xml

vim server.xml

拉到这个文件的最下面,对这几行进行修改就行了:

6fb8c7252fd3cd7d28c2e9866890fe12.png

改为:

                            # 连接mycat数据库的用户名为mycat

123456 # 连接mycat数据库的密码为123456

TESTDB  # 创建一个逻辑数据库,名为TESTDB

完了过后顺便把上图中红框下面那个标签那6行配置给删了。

最后就是这样,记住你设置的用户名和密码:

339de97cfa313944ac2ed844156420cb.png

然后我们修改schema.xml

改成这样就行了:

select user()

下面就是我机器上实际的样子:

a29af0ec77aa7ad7d9238bffec671dfe.png

至此mycat的重要配置就完成了,在正式启动mycat之前,我们还要验证一下我们的两台服务器上的数据库能不能够正常连接,只有保证了正常连接,我们的mycat才能正常工作,验证的方法是在我的192.168.2.124这台主机上分别远程连接我的两个物理数据库。如下:

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已经启动成功了:

8a6e237632d714ca84af458d4ca2092a.png

然后我们就要登陆到mycat去看看了:

mysql -umycat -p123456 -P8066 -h 192.168.2.124

# 我之前设置的mycat用户名就是mycat,密码是123456,所以上面的代码就能进入到我的mycat服务器

下面是我的真实代码示例,可以看出,成功进入mycat的命令行界面,跟mysql没有啥区别:

f0eb93139e410e8e4c89a38b79fb6d4a.png

然后我进入之前创建的TESTDB逻辑库,由于这个逻辑库对应的物理库是testdb,而这个库里面有一张user表,那我就不客气了,直接插入一条数据试试:

insert into user values (3,@@hostname);

6bbe8fb62ee4c2d61f4e69cb5d6e8ebe.png

你看数据插入成功了,这条sql的神奇之处就是,它会在我的写主机和读主机上插入不同的数据,接下来我们用navicat来看看到底有没有数据:

dc25674512335fd7f924f23847473647.png

790e467190309128dfc94b2a263979a4.png

很神奇,数据插入成功了,而且正如我所说,两台物理数据库的值是不一样的,你看看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 上分发的:

ab021c73e7ff7e43e784f737c589e3c4.png

事实证明是对的,我两次读出来的数据不一样,来自两台物理数据库,读写分离搭建成功了。

当然我设置balance=2是为了验证读写分离,正常生产环境一主一从的话一般设置balance=3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值