数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录

1、概述

2、环境准备

3、读写分离实验

3.1、安装jdk

3.2、安装Mycat

3.3、配置Mycat

3.3.1、配置schema.xml

​​​​3.3.2、配置server.xml

3.4、修改主从机远程登陆权限

3.4.1、主机

3.4.2、从机

3.5、启动Mycat

3.6、登录Mycat

3.7、验证


1、概述

  • 读写分离就是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。
  • 通过MyCat即可轻易实现上述功能。
    • 【注】Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。
  • 下面为一主一从的图解: 
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第1张图片

2、环境准备

  • 主机:阿里云服务器Ubuntu22.04
  • 从机:本地电脑Win10
  • Mycat1.6(从机Win10上)
  • java环境:jdk1.8
  • 数据库:Mysql8.0.34
  • 读写分离是基于主从复制的,如何搭建主从复制可以看这篇文章:数据库进阶教学——主从复制(Ubuntu22.04主+Win10从)-CSDN博客
  • 搭建好主从复制环境后,在从机中查看主从复制信息,显示如下。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第2张图片

3、读写分离实验

3.1、安装jdk

  • 使用mycat是需要java环境的,先查看本地电脑上是否安装了java环境。
    • 【注】mycat1.6需要的jdk版本不能太新,不然会报错!用jdk1.8就行。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第3张图片
  • 我这已经安装好了,没有安装的可以参考:超详细JDK1.8安装与配置_jdk1.8安装教程及环境变量配置-CSDN博客

3.2、安装Mycat

  • 理论上,应该将Mycat安装在一个独立的服务器上,然后配置Mycat与主库和从库建立连接,通过Mycat提供的读写分离配置,将读操作分发到从库,将写操作分发到主库。
  • 这里为了方便,直接在本地电脑(从库)上安装Mycat。Mycat资源:Win10安装Mycat_mycat windows-CSDN博客(不知道为啥官网打不开)。
    • 【注】因为我的本地电脑没有外网,所以mycat只能装在我的本地电脑中。如果装在服务器上,它将不能访问我的本地电脑。而我的本地电脑是可以访问服务器的。
  • 【注】下面是在Win10中安装Mycat。
  • 下载压缩包并解压。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第4张图片
  • 配置环境变量:
    • 新增环境变量MYCAT_HOME,配置mycat的根目录。
      • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第5张图片
    • 新增Path变量。
      • %MYCAT_HOME%\bin
      • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第6张图片
  • 修改配置文件mycat/conf/wrapper.conf 
    • # 添加java路径
      wrapper.java.command=D:\App\Java\jdk-1.8\
      wrapper.java.command=%JAVA_HOME%/bin/java.exe
      
      # 修改内存
      wrapper.java.additional.10=-Xmx4G
      wrapper.java.additional.11=-Xms1G
      改为:
      wrapper.java.additional.10=-Xmx512M
      wrapper.java.additional.11=-Xms64M
    • 019e0191d0484436be31eab2d3715d18.png
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第7张图片

3.3、配置Mycat

3.3.1、配置schema.xml
  • Mycat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制。
  • balance参数值:
    • 0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
    • 1:全部的readHost与备用的writeHost都参与select语句的负载均衡(主要针对于双主双从模式)。
    • 2:所有的读写操作都随机在writeHost,readHost上分发。
    • 3:所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力。
  • schema.xml位置:
    • 555cd570f1854166a031ccaa1bbd6d91.png
  • 选择要实现读写分离的数据库,要在文件中修改对应的名字。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第8张图片
    • 
      
      
      
      	
      	
      	
      
      	
      		select user()
      		
      				   
      			
      		
      	
      
      
  • 重点关注以下几个参数:
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第9张图片
​​​​3.3.2、配置server.xml
  • server.xml的位置。
    • 555cd570f1854166a031ccaa1bbd6d91.png
  • 修改逻辑库。
    • 
      
      	root  # mycat登录密码
      	MASTER_RW
      
      
      
      	user
      	MASTER_RW
      	true
      

3.4、修改主从机远程登陆权限

  • mycat需要通过权限访问主库和从库。 
3.4.1、主机
  • 进入数据库,输入命令:
    • update user set host='%' where user = 'root';
      flush privileges;  # 刷新权限
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第10张图片
3.4.2、从机
  •  进入数据库,输入命令:
    • update user set host='%' where user = 'root';
      flush privileges;  # 刷新权限
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第11张图片

3.5、启动Mycat

  • 以管理员打开终端,进入 mycat/bin,启动mycat。
    • mycat.bat start
    • 启动失败:
      • 0980566c276c49ca8335c8ad3bdeaa65.png
      • 查看日志文件wrapper.log。
        • b4058967cf904822866280b9e924f495.png
        • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第12张图片
    • 解决办法:
      • 修改配置文件mycat/conf/wrapper.conf
      • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第13张图片
  • 再次启动,成功。
    • 4ef4a17cd13c410da5a7d2c5554425bc.png

3.6、登录Mycat

  • 使用终端登录mycat。
    • mysql -u root -p -h127.0.0.1 -P8066
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第14张图片
  • 登录成功,查看其中的数据。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第15张图片 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第16张图片 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第17张图片

3.7、验证

  • 在mycat的终端插入一条数据。 
    • insert into tb_user(id,name,sex) values(4,'master',0);
  • 查看主库的数据,已经插入了新数据。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第18张图片

  • 查看从库的数据,并没有插入新数据。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第19张图片
    • 说明插入操作是在主库中进行的。
  • 【注】这是因为主从复制和读写分离配置的都是3306端口,使用了读写分离后,主从复制就会失效。只需要用完读写分离后,再打开主从复制即可。
  • 在mycat中执行查询操作。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第20张图片
    • 查询到的数据与从库一致,说明查询操作是在从库中进行的
  • 重新开启主从复制。在从库的数据库中执行下列命令:
    • stop slave;
      set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
      start slave;
      show replica status\G;
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第21张图片
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第22张图片

  • 查看从库数据,已经与主库保持一致。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第23张图片
  • 再次在mycat中执行查询操作。
    • 数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)_第24张图片
  • 验证完毕。

你可能感兴趣的:(数据库,数据库)