Mysql数据库架构读写分离

发布于:2025-07-29 ⋅ 阅读:(15) ⋅ 点赞:(0)

搭建环境

一、搭建M-S复制

㈠ 环境说明

IP 主机名 角色 软件环境
192.168.121.151 web01 web服务器 mysql客户端
192.168.121.153 master master(主) mysql:5.7.31
192.168.121.154 lave salve(从) mysql:5.7.31
192.168.121.155 mycat mycat jdk+mycat

主从复制的原理 :主服务器开启bin-log(记录了写操作) 从服务器获取到主服务器的bin-log 记录到relay-log中。从服务器在通过异步的线程方式,对于relay-log进行重放操作。

mysql主从复制集群见30分钟搞懂MySQL主从复制集群搭建-CSDN博客进行部署。

二、MyCAT实现读写分离

1、介绍

Mycat 数据库中间件

国内最活跃的、性能最好的开源数据库中间件!

官方网址:http://www.mycat.io/

https://github.com/MyCATApache/MyCAT-Server/

因为mycat是由java语言开发,必须使用java的运行环境才能进行启动和操作

2、mycat安装和测试启动

①解压安装MyCAT

tar xvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

实际解压到目录即可,无需安装

②软件目录介绍

目录或文件 作用
bin 相关软件管理命令等
conf 配置文件目录
logs 日志目录

③启动mycat

默认情况下启动mycat是可以启动的

#通过控制台  进行前端启动   可以看到执行过程
/usr/local/mycat/bin/mycat console

 注意如果启动不成功,可能是由于没有解析主机名称。需要在hosts文件中进行解析。

3、配置读写分离

读写分离的配置文件:

文件名称 作用
server.xml 配置mycat的对外的用户、密码、映射数据库名称等信息
schema.xml 配置后端真实数据库的用户、密码、真实数据库名称等信息

Mycat是由java开发,java开发的软件大部分配置文件是xml格式。注意它的基本格式。

xml格式注意点:

1、xml声明信息

2、具有一个根标签

3、双标签和单标签格式

4、注意闭合标签

5、注释格式为 <!-- 这里是注释内容 -->

 ①查看server.xml

默认server.xml可以不用修改

/usr/local/mycat/conf
vim server.xml

修改server.xml

配置mycat对外的使用用户信息

②修改schema.xml

schema标签里配置name的server.xml里的虚拟数据库名称,dataNode 填写后面使用的dataNode名称

dataNode标签和dataHost指定配置使用

dataHost标签里配置writeHost和readHost(密码,地址,用户名称)

精简过的配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 定义逻辑数据库 TESTDB -->
    <!-- checkSQLschema="false": 不检查 SQL 中的 schema 前缀 -->
    <!-- sqlMaxLimit="100": 自动为所有查询添加 LIMIT 100 限制 -->
    <!-- dataNode="dn1": 指定默认的数据节点为 dn1 -->
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    
    <!-- 定义数据节点 dn1,映射到物理数据库 test -->
    <!-- dataHost="localhost1": 指定数据节点使用的数据源为 localhost1 -->
    <!-- database="test": 指定物理数据库名称 -->
    <dataNode name="dn1" dataHost="localhost1" database="test" />
    
    <!-- 定义数据源 localhost1,包含主从服务器配置 -->
    <!-- maxCon/minCon: 最大/最小连接数 -->
    <!-- balance="1": 负载均衡模式(1=主库读+从库读) -->
    <!-- writeType="0": 所有写操作都发到主库 -->
    <!-- switchType="1": 自动切换主从 -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        
        <!-- 心跳检测 SQL,用于检查数据库连接是否正常 -->
        <heartbeat>select user()</heartbeat>
        
        <!-- 主服务器配置 -->
        <writeHost host="hostM1" url="192.168.121.153:3306" user="root" password="123456">
            <!-- 从服务器配置,用于分担读压力 -->
            <readHost host="hostS2" url="192.168.121.154:3310" user="root" password="123456" />
        </writeHost>
    </dataHost>
</mycat:schema>

③启动mycat服务

/usr/local/mycat/bin/mycat start
#确认mycat是否真的启动,查看它的端口 9066 8066
netstat -lntp|grep 8066
netstat -lntp|grep 9066

Tip:如果配置之后,启动mycat,不能够启动

通过查看/usr/local/mycat/logs/wrapper.log

4、mycat客户端

web01服务器上

yum install mysql -y

通过 yum 包管理器安装 MySQL 客户端

连接mycat客户端

mysql -h192.168.121.155 -uroot -p123456 -P8066

执行查询命令测试结果

mysql > show databases;
mysql > use TESTDB;
mysql > show tables;

4.1mycat管理端

连接mycat管理端

mysql -h192.168.121.155 -uroot -p123456 -P9066

执行管理命令查看

mysql > show @@help;  //查看管理监控端的所有帮助命令
mysql > show @@heartbeat;  //查看服务器状态

5、读写分离测试

vim schema.xml

修改balance=“1”表示开启读写分离

 编辑 MyCat 的日志配置文件 log4j2.xml

vim /usr/local/mycat/conf/log4j2.xml

 

  • AsyncRoot:使用异步日志(通过单独线程写入日志),大幅提升性能
  • level="debug":记录所有 DEBUG 及以上级别的日志(包含大量细节)
  • includeLocation="true":在日志中包含调用位置(类名、行号),方便定位问题

5.1 写入测试

mysql01创建一个测试表

mysql -uroot -p

use test;

create table ds_mycat(id int, name char(1));

web01

mysql -h 192.168.121.155 -P 8066 -uroot -p123456

use TESTDB;

MySQL [TESTDB]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| ds_mycat       |
| test_home      |
+----------------+
2 rows in set (0.00 sec)

MySQL [TESTDB]> insert into ds_mycat values (2,'b');
Query OK, 1 row affected (0.01 sec)

进入mycat/logs目录下查看mycat.log文件

输入/insert into 进行查找

可以看到写入的主机ip是mysql主服务器

5.2 读取测试

web01

mysql -h 192.168.121.155 -P 8066 -uroot -p123456

use TESTDB;

MySQL [TESTDB]> select * from ds_mycat where id =2 ;
+------+------+
| id   | name |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

进入mycat/logs目录下查看mycat.log文件

输入/select 进行查找

可以看到写入的主机ip是mysql从服务器

通过测试结果证明mycat读写分离成功


网站公告

今日签到

点亮在社区的每一天
去签到