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 决定的,而这个参数配置的就是分片规则,关于分片规则的配置,在后面的课中 会详细讲解。

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

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

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

猜你喜欢

转载自blog.csdn.net/lzl10211345/article/details/131472160