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) 将数据分配到指定的数据库中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/637128.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

volatility内存取证

记录一道volatility内存取证的题目,第一次遇到,现场把环境搞出来,现记录一些操作指令。 一、安装volatility3 1、新建一个kali虚拟机 新建的过程不再赘述。 2、下载volatility3 GitHub - volatilityfoundation/volatility3: Volatility …

Spring Cloud 运维篇1——Jenkins CI/CD 持续集成部署

Jenkins 1、Jenkins是什么? Jenkins 是一款开源 CI/CD 软件,用于自动化各种任务,包括构建、测试和部署软件。 Jenkins 支持各种运行方式,可通过系统包、Docker 或者一个独立的 Java 程序。 Jenkins Docker Compose持续集成流…

政企版 WPS Pro 专业版注册安装教程

政企版 WPS Pro 专业版安装及激活步骤 第 1 步:下载压缩包(内含注册码)【无解压密码】。 第 2 步:解压缩后,运行 exe 文件,默认步骤安装即可。 第 3 步:安装完成后,新建一个 Word …

Mysql学习大纲

文章目录 整体大纲总结 整体大纲 大纲 MySQL在金融互联网行业的企业级安装部署mysql启动关闭原理和实战,及常见错误排查 花钱9.9 订阅了专栏MySQL字符集和校对规则史上最详细的Mysql用户权原理和实战,生产案例InnoDB引擎原理和实战,通俗易懂…

MySQL如何避免全表扫描?

MySQL如何避免全表扫描? 这篇文章解释了何时以及为什么MySQL会执行全表扫描来解析查询,以及如何避免在大型表上进行不必要的全表扫描。 何时会发生全表扫描 MySQL使用全表扫描(在EXPLAIN输出中的type列显示为ALL)来解析查询的几…

web--弱口令安全

字典(一种是产品初始化的密码,一种是改变的密码 对爆破密码进行加密 先这个 对账号和密码同时爆破 设置两个要用这个模式 ssh,rdp远程终端 linux的用户名为root,windows为administrator 这就被爆破了 zip,word文件猜解

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包(node1举例) 2.1.2 操作 将解压后的kafka移动到kafka,进入到kafka下的config中,复制文件 2.1.2.1 编辑server.pr…

7. Spring Boot 创建与使用

经过前面的六篇文章,Spring Framework的知识终于大致讲完了,但是Spring AOP还没提到,个人认为Spring AOP更适合放在Spring MVC之后再讲解,而讲解Spring MVC前先学习Spring Boot的目的也是为了在学习Spring MVC的时候直接使用Sprin…

内网云盘如何内网穿透实现公网访问

云盘是一种专业的互联网存储工具,是互联网云技术的产物,它通过互联网为企业和个人提供信息的存储、读取、下载等服务,具有安全稳定、海量存储的特点。随着企业信息化发展,云盘系统需求不断扩大,相关系统软件被广泛应用…

数据分析(1)

数据分析基础(1) 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识,因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解,避免在后续学习中产生迷茫。 数据分析的概念 定义:数据分析…

java线程-线程池

简介 工作原理 如何获取线程池对象 构造器的参数含义 注意事项 构造器-ThreadPoolExecutor // ArrayBlockingQueue 是一个有界的阻塞队列,它的内部实现是一个数组。有界的意思是它的容量是有限的,我们必须在创建 ArrayBlockingQueue 实例的时候指定容量…

我与C++的爱恋:类和对象(四)

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 ​ 朋友们大家好!本篇是类和对象的最后一个部分。 一、static成员 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之…