全栈工程师_java全栈工程师_全栈开发者学习经验总结

  • 首页
  • 开发工具
    • 软件安装
    • 软件使用
  • 前端
    • Ionic
    • Android
    • Capacitor
    • Angular
    • Vue
    • 苹果开发者账号
  • 后端
    • Java
    • Python
    • MyBatis
    • Spring
    • SpringBoot
    • SpringMVC
    • SpringCloud
  • 服务器
    • Linux
    • MySQL
    • Nginx
    • Tomcat
    • Docker
  • 其他
    • 生活碎片
    • 报错专区
  • 我
lipsuper
专注产出高质量原创手打文章
  1. 首页
  2. 服务器
  3. MySQL
  4. 正文

用Mycat实现MySQL服务器一主一从的读写分离

2020年6月22日 926点热度 0人点赞 0条评论

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

一、安装Mycat

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

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>

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

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

然后我们就要登陆到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。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 保姆级指导 经验总结
最后更新:2020年6月23日

lipsuper

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 lipsuper.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2021004735号-1

渝公网安备 50011202502306号