♥️作者:小刘在C站
♥️个人主页: 小刘主页
♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!
♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术
♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSDN让你我相遇!
前言
上章文章讲到MySQL-分库分表(一)本章继续
目录
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
的整体结构中,分为两个部分:上面的逻辑结构、下面的物理结构。
![](https://img-blog.csdnimg.cn/fc82f486a0724adb9aa427fd5eb51d2a.png)
在
MyCat
的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。
在后面讲解
MyCat
入门以及
MyCat
分片时,还会讲到上面所提到的概念。
3 MyCat入门
3.1 需求
由于
tb_order
表中数据量很大,磁盘
IO
及容量都到达了瓶颈,现在需要对
tb_order
表进行数
据分片,分为三个数据节点,每一个节点主机位于不同的服务器上
,
具体的结构,参考下图:
![](https://img-blog.csdnimg.cn/d02f7ba2d53946a8a89c571e4a493b90.png)
3.2 环境准备
准备
3
台服务器:
192.168.200.210
:
MyCat
中间件服务器,同时也是第一个分片服务器。
192.168.200.213
:第二个分片服务器。
192.168.200.214
:第三个分片服务器。
![](https://img-blog.csdnimg.cn/c3d07a761ac5434584e02d83cdc2bca3.png)
并且在上述
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&serverTimezone=Asia/Shanghai&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
决定的,而这个参数配置的就是分片规则,关于分片规则的配置,在后面的课中
会详细讲解。
♥️关注,就是我创作的动力
♥️点赞,就是对我最大的认可
♥️这里是小刘,励志用心做好每一篇文章,谢谢大家