MyCat 数据库中间件

一、介绍

1、单数据库进行数据存储的问题:

IO瓶颈:热点数据太多,数据库缓存不足以容纳这些热点数据,产生大量磁盘IO,效率较低。

CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源。

2、分库分表:

分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

分库分表的形式,主要是两种:垂直拆分和水平拆分。而拆分的粒度,一般分为分库和分表。

实现技术:MyCat 数据库分库分表中间件,不用调整代码即可实现分库分表。

(1) 垂直拆分:

① 垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

每个库的表结构都不一样。

每个库的数据也不一样。

所有库的并集是全量数据。

② 垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。

每个表的结构都不一样。

每个表的数据也不一样,一般通过一列(主键/外键)关联。

所有表的并集是全量数据。

(2) 水平拆分:

① 水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。

每个库的表结构都一样。

每个库的数据都不一样。

所有库的并集是全量数据。

② 水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。

每个表的表结构都一样。

每个表的数据都不一样。

所有表的并集是全量数据。

二、MyCat 概述

1、mycat 介绍:

Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用 mycat,具体的分库分表的策略,只需要在MyCat中配置即可。

2、mycat 安装:

(1) 环境部署:

10.1.1.10 :MyCat中间件服务器、分片服务器(MySQL、jdk、mycat)

10.1.1.30 :分片服务器(MySQL)

10.1.1.40 :分片服务器(MySQL)

(2) 安装 jdk:

① 解压安装包:

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local

cd /usr/local

mv jdk1.8.0_171/ jdk/

② 配置环境变量:

vim /etc/profile

export JAVA_HOME=/usr/local/jdk

export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile

(3) 安装mycat:

tar -zxvf Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz -C /usr/local/

目录介绍:

bin : 存放可执行文件,用于启动停止mycat

conf:存放mycat的配置文件

lib:存放mycat的项目依赖包(jar)

logs:存放mycat的日志文件

更改mysql驱动包:

lib中的mysql-connector-java-5.1.35.jar版本过低,需要替换成mysql-connector-java-8.0.22.jar。

修改权限:

chmod 777 mysql-connector-java-8.0.22.jar

3、mycat 结构:

MyCat的整体结构分为两个部分:逻辑结构和物理结构。

① 逻辑结构(不存放真实数据):

schema:逻辑层面上的数据库。

table:逻辑表,一个逻辑库中可以存有多个逻辑表。

dataNode:分片节点,一个逻辑表中的数据可分散存放在多个分片节点中 ;分片的划分由分片规则决定。

② 物理结构(存放真实数据):

真实的数据库与分片节点相关联,根据分片规则存储数据。

4、mycat 配置:

10.1.1.10 :MyCat中间件服务器、第一个分片服务器

10.1.1.30 :第二个分片服务器

10.1.1.40 :第三个分片服务器

在上述3台分片服务器库中创建数据库 db01。

(1) 配置 schema.xml:

在schema.xml中配置逻辑库、逻辑表、数据节点、节点主机等相关信息。

① 配置mycat逻辑数据库DB01,配置逻辑数据表TB_ORDER,设置三个分片节点dn1、dn2、dn3,设置分片规则为auto-sharding-long。

● auto-sharding-long:根据id值进行分片

vim rule.xml

auto-sharding-long引用了一个range-long方式

以id值作为分片依据:

0-5000000 分配到第一个数据库;

5000001-10000000 分配到第二个数据库;

10000001-15000000 分配到第三个数据库。

② 配置分片节点所关联的真实数据库名及存储数据的库名。

③ 配置真实数据库的信息:

修改name为dhost1/2/3,dbDriver为jdbc。

三台都为读写数据库,角色都是master,配置url,设置登录数据库所需的用户名和密码。

● jdbc:Java Database Connectivity,Java数据库连接,是一种用于数据库访问的应用程序API。

url="jdbc:mysql://10.1.1.10:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" />

(2) 配置 server.xml:

在server.xml中配置登录mycat所需的用户名、密码,以及用户的访问权限信息。

设置登录mycat的用户为root,密码为123456,可访问DB01;

user用户类似,但user用户权限为只读。

5、mycat 测试:

(1) 启动 mycat:

切换到Mycat的安装目录:

bin/mycat start #启动

bin/mycat stop #停止

● 小插曲:第一次启动mycat时失败了,查看启动日志后发现报错原因如下:

Caused by: org.xml.sax.SAXParseException; lineNumber: 18; columnNumber: 88; The reference to entity "serverTimezone" must end with the ';' delimiter.

这条报错信息的意思是在配置真实数据库的url时,serverTimezone结尾漏了一个";",修改了三台真实服务器的url后,mycat启动成功。

(2) 连接 mycat:

mysql -h 10.1.1.10 -P 8066 -uroot -p123456

在MyCat中创建表,并往表结构中插入数据,查看数据在MySQL中的分布情况。

create table tb_order (id BIGINT(20));

mycat 会根据预设的分片规则 (auto-sharding-long) 将数据分配到指定的数据库中。

相关推荐

  1. 分布式数据库中间 Mycat 和 ShardingSphere 对比

    2024-04-23 04:16:04       27 阅读
  2. 中间

    2024-04-23 04:16:04       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 04:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 04:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 04:16:04       82 阅读
  4. Python语言-面向对象

    2024-04-23 04:16:04       91 阅读

热门阅读

  1. 2024年4月,docker启动新版minio

    2024-04-23 04:16:04       34 阅读
  2. 消息队列的选择与应用

    2024-04-23 04:16:04       32 阅读
  3. 软考信息系统项目管理师,如何赢战论文?

    2024-04-23 04:16:04       40 阅读
  4. ChatGPT之道:巧用写作技巧

    2024-04-23 04:16:04       35 阅读
  5. 利用H.264码流传输摄像头地理位置信息

    2024-04-23 04:16:04       34 阅读
  6. webpack + ts 搭建 web 应用

    2024-04-23 04:16:04       34 阅读