♥️作者:小刘在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 目录介绍
![](https://img-blog.csdnimg.cn/bf0947da37e74842af6f44c9de9ccc75.png)
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&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
决定的,而这个参数配置的就是分片规则,关于分片规则的配置,在后面的课中
会详细讲解。
♥️关注,就是我创作的动力
♥️点赞,就是对我最大的认可
♥️这里是小刘,励志用心做好每一篇文章,谢谢大家