MySQL-分库分表详解(二)

♥️作者:小刘在C站

♥️个人主页: 小刘主页 

♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!

♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术

♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSDN让你我相遇!

前言

上章文章讲到MySQL-分库分表(一)本章继续

目录

MySQL

2.4 目录介绍

2.5 概念介绍

3 MyCat入门

3.1 需求

 3.2 环境准备

3.3 配置

1). schema.xml

2). server.xml

3.4 测试

3.4.1 启动

 3.4.2 测试

1). 连接MyCat

2). 数据测试


MySQL

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

2.4 目录介绍

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

conf :存放 mycat 的配置文件
lib :存放 mycat 的项目依赖包( jar
logs :存放 mycat 的日志文件

2.5 概念介绍

MyCat 的整体结构中,分为两个部分:上面的逻辑结构、下面的物理结构。

 

MyCat 的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。
在后面讲解 MyCat 入门以及 MyCat 分片时,还会讲到上面所提到的概念。

3 MyCat入门

3.1 需求

由于 tb_order 表中数据量很大,磁盘 IO 及容量都到达了瓶颈,现在需要对 tb_order 表进行数
据分片,分为三个数据节点,每一个节点主机位于不同的服务器上 , 具体的结构,参考下图:

 3.2 环境准备

准备 3 台服务器:
192.168.200.210 MyCat 中间件服务器,同时也是第一个分片服务器。
192.168.200.213 :第二个分片服务器。
192.168.200.214 :第三个分片服务器。

 

并且在上述 3 台数据库中创建数据库 db01

3.3 配置

1). schema.xml

schema.xml 中配置逻辑库、逻辑表、数据节点、节点主机等相关信息。具体的配置如下:
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"><schema name="DB01" checkSQLschema="true" sqlMaxLimit="100"><table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/></schema><dataNode name="dn1" dataHost="dhost1" database="db01" /><dataNode name="dn2" dataHost="dhost2" database="db01" /><dataNode name="dn3" dataHost="dhost3" database="db01" /><dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="master" url="jdbc:mysql://192.168.200.210:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"user="root" password="1234" /></dataHost>
</mycat:schema>

2). server.xml

需要在 server.xml 中配置用户名、密码,以及用户的访问权限信息,具体的配置如下:
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">DB01</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="true">
<schema name="DB01" dml="0110" >
<table name="TB_ORDER" dml="1110"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">123456</property>
<property name="schemas">DB01</property>
<property name="readOnly">true</property>
</user>
上述的配置表示,定义了两个用户 root user ,这两个用户都可以访问 DB01 这个逻辑库,访
问密码都是 123456 ,但是 root 用户访问 DB01 逻辑库,既可以读,又可以写,但是 user 用户访问
DB01 逻辑库是只读的。

3.4 测试

3.4.1 启动

配置完毕后,先启动涉及到的 3 台分片服务器,然后启动 MyCat 服务器。切换到 Mycat 的安装目录,执行如下指令,启动 Mycat:        
#启动
bin/mycat start
#停止
bin/mycat stop
Mycat 启动之后,占用端口号 8066
启动完毕之后,可以查看 logs 目录下的启动日志,查看 Mycat 是否启动完成。

我们看到我们是通过MySQL的指令来连接的MyCat,因为MyCat在底层实际上是模拟了MySQL的协议。

 3.4.2 测试

1). 连接MyCat

通过如下指令,就可以连接并登陆 MyCat
mysql -h 192.168.200.210 -P 8066 -uroot -p123456

2). 数据测试

然后就可以在 MyCat 中来创建表,并往表结构中插入数据,查看数据在 MySQL 中的分布情况。
CREATE TABLE TB_ORDER (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
INSERT INTO TB_ORDER(id,title) VALUES(1,'goods1');
INSERT INTO TB_ORDER(id,title) VALUES(2,'goods2');
INSERT INTO TB_ORDER(id,title) VALUES(3,'goods3');
INSERT INTO TB_ORDER(id,title) VALUES(1,'goods1');
INSERT INTO TB_ORDER(id,title) VALUES(2,'goods2');
INSERT INTO TB_ORDER(id,title) VALUES(3,'goods3');
INSERT INTO TB_ORDER(id,title) VALUES(5000000,'goods5000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000000,'goods10000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000001,'goods10000001');
INSERT INTO TB_ORDER(id,title) VALUES(15000000,'goods15000000');
INSERT INTO TB_ORDER(id,title) VALUES(15000001,'goods15000001');
经过测试,我们发现,在往 TB_ORDER 表中插入数据时:
如果 id 的值在 1-500w 之间,数据将会存储在第一个分片数据库中。
如果 id 的值在 500w-1000w 之间,数据将会存储在第二个分片数据库中。
如果 id 的值在 1000w-1500w 之间,数据将会存储在第三个分片数据库中。
如果 id 的值超出 1500w ,在插入数据时,将会报错。
为什么会出现这种现象,数据到底落在哪一个分片服务器到底是如何决定的呢? 这是由逻辑表配置时的一个参数 rule 决定的,而这个参数配置的就是分片规则,关于分片规则的配置,在后面的课中 会详细讲解。

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

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

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

相关文章

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里&#xff1f; 皮肤功能&#xff0c;摆脱传统VR全景展示样式&#xff0c;自行选择场景与全景分组的界面模板&#xff0c;从而与不同的应用行业风格相互适应&#xff0c;达到最贴切的展示效果。 是在各种风格的VR全景作品中&#xff0c;最快实…

转型开发后——我心里的Windows与Linux

前言 要说接触Linux还是在15年刚刚步入开发工作没多久以后才开始接触的&#xff0c;之前在学开发的时候都是用的windows&#xff0c;不管是学习前端&#xff0c;还是学习PHP和Python。当时觉得在Windows下搞这些开发语言好像理所当然就是这样的。下一个WAMP、XAMPP、Python环境…

zookeeper入门

一、分布式思想 当某个文件数据的体量超出了某一台服务器所能存储的最大容量时&#xff0c;如要继续存储&#xff0c;则首先根据数据整体规模大小以及单台服务器所能存储的最大容量&#xff0c;计算出存储改文件所需要的服务器总台数&#xff0c;进而实现服务器节点数量的规划&…

MBD开发 STM32 UASRT

目录 轮询 ptintf 中断方式 DMA方式 轮询 串口要加入这两个文件 bug在于接到10个后会一直发送 ptintf function buffPtr convert(buff)if coder.target(Sfun)%固定句式%Executing in MATLAB, Buff is nullbuffPtr uint32(0); elsecoder.cinclude(getBuffPtr.h);%加入头…

Mybatis处理复杂查询环境

复杂查询环境 多对一和一对多 多个工作者对应一个协调人 对于工作者(worker)而言&#xff0c;多个工作者关联一个协调人(coordinator)&#xff08;多对一&#xff0c;关联&#xff09; 对于协调人而言&#xff0c;一个协调人有很多工作者&#xff08;一对多&#xff0c;集合&a…

node版本管理工具nvm手册

文章目录 下载使用命令node.js其他版本下载下载exe版解压改名放入到指定位置 下载 github下载 使用命令 查看当前版本 nvm -v 查看被管理的node nvm list 切换node版本 nvm use 14.21.3 node.js其他版本下载 下载链接 下载exe版 解压改名放入到指定位置

【Squid二】使用squid和nginx服务搭建反向缓存代理服务

使用squid和nginx服务搭建反向缓存代理服务 1.反向代理1.1 反向代理概述1.2 反向代理工作机制 2.搭建squid反向代理服务2.1 Nginx服务器端配置2.2 squid反向代理服务器配置 3.搭建nginx反向缓存代理服务3.1 nginx反向缓存代理服务配置3.2 nginx服务端配置3.3 客户端验证访问 参…

老照片修复:模糊褪色有划痕的老旧照片如何修复?

在我们的生活中&#xff0c;照片是记录我们生活的重要方式之一。无论是在手机相册里还是在家中的相册里&#xff0c;我们都有很多珍贵的照片&#xff0c;但是随着时间的推移&#xff0c;照片也会老化&#xff0c;甚至出现褪色、划痕、折痕、破损、发霉等情况&#xff0c;这些情…

2核4G服务器_4M带宽_CPU性能测评_60G系统盘

阿里云2核4G服务器297元一年、4M公网带宽、60G系统盘&#xff0c;阿里云轻量应用服务器2核4G4M带宽配置一年297.98元&#xff0c;2核2G3M带宽轻量服务器一年108元12个月&#xff0c;如下图&#xff1a; 目录 阿里云2核4G4M轻量应用服务器 2核4G服务器限制条件 轻量服务器介…

第 7 章 集合-----Scala集合继承图

7.1.1 不可变集合继承图 7.1.2 可变集合继承图 7.2.3 不可变数组与可变数组的转换 7.7.6 复杂 WordCount 案例 1&#xff09;方式一 object TestWordCount {def main(args: Array[String]): Unit {// 第一种方式&#xff08;不通用&#xff09;val tupleList List(("H…

自定义MVC

目录 一、MVC概念描述 1、什么是MVC&#xff1f; 2、什么是自定义MVC&#xff1f; 3、自定义MVC有什么用&#xff08;主要用途&#xff09;&#xff1f; 二、MVC三层架构 第一种版本 JSP页面 servlet 结果 第二种版本 JSP代码 servlet 结果 第三种版本 jsp页面 s…

HIve中的查询语句

文章目录 Hive中的查询语句1. 基础语法2. 基本查询&#xff08;Select…From&#xff09;2.1 数据准备&#xff08;0&#xff09;原始数据&#xff08;1&#xff09;创建部门表&#xff08;2&#xff09;创建员工表&#xff08;3&#xff09;导入数据 2.2 全表和特定列查询1&am…