Mycat配置实现MySQL主从复制,读写分离,分库分表

本文介绍了Mycat数据库中间件,详细阐述了其核心概念,如逻辑库、逻辑表、分片节点。通过配置server.xml、schema.xml和rule.xml实现Mycat的安装与基本配置,包括读写分离和分库分表。此外,文章还讨论了Mycat与MySQL 8.0的兼容性问题。
摘要由CSDN通过智能技术生成

一、Mycat 简介

在这里插入图片描述
Mycat 是一个开源的数据库中间件,可以解决分布式数据库环境下的大多数问题,如读写分离、分库分表等,除此之外,它还具备以下特性:

  1. 支持 MySQL、Oracle、DB2、SQL Server、PostgreSQL 等数据库常见的 SQL 语法。
    能够基于心跳机制进行自动地故障切换,支持读写分离,支持MySQL主从架构,以及 galera cluster 集群。

  2. 支持数据的多片自动路由与聚合,支持 sum,count,max 等常用的聚合函数,支持跨库分页。 支持单库内部任意

  3. join,支持跨库两表 join,也支持基于 caltlet 的多表 join。 支持通过全局表,ER 关系表等分片策略来实现多表

  4. join 查询。 支持XA分布式事务(1.6.5 +)。 支持全局序列号,能够解决分布式环境下的主键生成问题。 支持使用

  5. zookeeper 来协调主从切换、统一管理配置数据以及使用 zookeeper 来生成全局唯一 ID。( 1.6+ ) 提供了 Web

  6. 监控界面,来对 Mycat、MySQL 以及服务器的状态进行监控。

二、Mycat 核心概念

在引入 Mycat 后,所有的客户端请求需要经过中间件进行转发上,此时客户端直接面向的是 Mycat 上的逻辑库或逻辑表:
逻辑库
在 Mycat 的配置文件中进行定义,它对应一个或者多个实际的数据库或数据库集群。
逻辑表
可以对应一张实际的表,也可以表示为多个分片表的集合。按其特性可以分为以下四类:

分片表: 按照指定键进行拆分,并散落到多个数据库实例上,从而可以解决单表过大的问题。

非分片表: 通常情况下,只有大表需要分片,小表并没有分片的必要,所以在 Mycat 中它们也被称为非分片表,主要是为了在概念上与分片表进行区分。

ER表: 基于实体关系模型进行分片的表,如订单表和订单明细表通常都是大表,此时可以按照订单号进行 ER 分片,从而保证同一单号的订单记录和明细记录都处于同一分片上,进而避免跨分片查询。

全局表: 同样也是用于避免跨分片查询。假设在查询订单明细时需要查询产品所属分类 (如家电产品、生活用品),产品类别表通常是小表,此时可以声明为全局表,之后 Mycat 会将其拷贝到所有分片上,从而避免跨分片查询。

分片节点

将表按照分片键进行分片后,一个表中的所有数据就会被分发到不同的数据库上,这些数据库节点就称为分片节点。

三、Mycat 安装

四、Mycat 基本配置

在 Mycat 的安装目录的 conf 目录下,有以下三个核心配置文件:

  1. server.xml:主要用于定义用户信息,全局 SQL 防火墙、以及与 Mycat 自身相关的配置。
  2. schema.xml:主要用于定义逻辑库,逻辑表,逻辑数据节点以及实际的物理数据库的信息。
  3. rule.xml:主要用于定义分片规则,并提供给 schema.xml 标签中的分片表使用。

4.1 server.xml

一个 server.xml 的配置示例如下,主要包含以下标签:

system:定义 Mycat 相关的配置。
firewall:配置全局 SQL 防火墙,可以在其下通过子标签定义 IP 白名单和黑名单。
user:用于设置默认账户或普通账户,并为其分配在逻辑库或逻辑表上的权限。权限通过 dml 属性来指定,如 dml=“0110” ,四个位置上的数值分别对应 insert,update,select,delete 权限,1 为具有该权限,0 为不具有。

<system> 
    <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
    <property name="nonePasswordLogin">0</property> 
    <property name="charset">utf8</property>
</system>

<firewall>
    <whitehost>
        <host host="1*7.0.0.*" user="root"/>
    </whitehost>
    <blacklist check="false">
    </blacklist>
</firewall>

<!-- 定义默认账户-->
<user name="root" defaultAccount="true">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
    <!-- 权限设置 -->
    <privileges check="true">
        <schema name="TESTDB" dml="0110" >
            <table name="tb01" dml="0000"></table>
            <table name="tb02" dml="1111"></table>
        </schema>
    </privileges>
</user>

<!-- 定义默认账户-->
<user name="user">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
</user>

在上面的示例中,用户配置的是明文密码,这样会存在安全隐患,因此 Mycat 也支持对密码进行加密,示例如下:

该jar包在Mycat安装目录的lib目录下

shell > java -cp Mycat-server-1.6.7.1-release.jar  io.mycat.util.DecryptUtil 0:root:123456
GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==

可以将明文密码替换为加密密码,但此时还需在对应用户的 user 标签下增加如下配置,代表启用加密功能:

<property name="usingDecrypt">1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值