MyCat中的概念
1.切分
逻辑上的切分,在物理层面使用多库(database)、多表(table)实现切分。
1.1 纵向切分/垂直切分
就是把原来存储在一个库的数据存储在多个库上
由于数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的问题。
例如:我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志数据库 logDB 等。
优点:
减少增量数据写入时的锁对查询的影响。
由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需检索的行数变少,减少了磁盘IO、时延变短。
缺点:
无法解决单表数据量太大的问题。
1.2 横向切分/水平切分
把原本存储于一个表的数据分块存储到多个表上
当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表上。
例如:我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable:userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。
优点:
单表的并发能力提高了,磁盘的I/O性能也提高了
如果出现高并发的话,总表可以根据不同的查询,将并发压力发到不同的小表里。
缺点:
无法实现表连接查询
2.逻辑库-Schema
MyCat中定义的database是逻辑上存在的,但物理上是不存在的。
主要是针对纵向切分提供的概念。
3.逻辑表-Table
MyCat中定义的table,是逻辑上存在,物理上不存在的
主要是针对横向切分提供的概念
4.默认端口
MySql:3306
MyCat:8066
Tomcat:8080
Oracle:1521
nginx:80
http:协议默认端口80
redis:6379
5.数据主机-DataHost
物理MySql存放的主机地址,可以使用主机名,IP,域名定义。
6.数据节点-DataNode
配置物理的database。数据保存的物理节点就是database
7.分片规则
当控制数据的时候,如何访问物理database和table?
就是访问dataHost和dataNode的算法
在Mysql处理CRUD时,如何访问datahost和datanode的算法?如:哈希算法,crc32算法等。
下载
github太慢直接网盘下就行,版本是1.6
链接: https://pan.baidu.com/s/1QQyIUj_Y03Ctpo22yIuNxA 密码: 3arv
安装
解压
tar -zxvf Mycat-server-1.6.7.1-linux.tar.gz
移动到/usr/local目录下
mv mycat /usr/local
进入/usr/local/mycat 目录
cd /usr/local/mycat
ll查看目录内容
bin:命令文件
catlet:空的,扩展
conf:配置文件(server.xml,schema.xml,rule.xml等)
schema.xml:定义逻辑库,表、分片节点等内容
rule.xml:定义分片规则
server.xml:定义用户以及系统相关变量,如端口等
lib:依赖的jar包
配置
进入conf目录
cd /usr/local/mycat/conf
以下建议可以进行vim的基本操作。
以下配置为演示,注意看配置信息和标签根据自己的需求进行修改
修改配置文件server.xml (经常修改)
childTable>
table>
schema>
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
select user()heartbeat>
writeHost>
dataHost>
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
select user()heartbeat>
writeHost>
dataHost>
mycat:schema>
配置schema.xml
8066property>
0property>
1property>
0property>
0property>
2property>
falseproperty>
0property>
0property>
1property>
64kproperty>
1kproperty>
0property>
384mproperty>
falseproperty>
falseproperty>
trueproperty>
system>
whitehost>
blacklist>
firewall>
123456property>
mydatabaseproperty>
user>
mycat:server>
启动
安装java-jdk:https://blog.csdn.net/qq_42094345/article/details/106954139
控制台启动 :去 mycat/bin 目录下执行 ./mycat console
后台启动 :去 mycat/bin 目录下 ./mycat start
为了能第一时间看到启动日志,方便定位问题,我们选择1控制台启动。
成功会有提示【successfully】
MyCAT Server startup successfully. see logs in logs/mycat.log
登陆mycat
mysql -umycat -p123456 -h 192.168.0.103 -P 8066
使用mysql命令登陆
用户名和密码是schema.xml 的 标签里面配置的用户名和密码
登陆成功
后面将写分库分表,主从啥的。
有用请三连,不胜感激!