Mycat的简介,以及在Linux的配置,l,sche。。。

更新时间:2023-06-16 08:26:15 阅读: 评论:0

Mycat的简介,以及在Linux的配置,l,sche。。。
1.为什么叫mycat
其实mycat在最早的初期版本只⽀持mysql⼀种数据库,换句话说mycat其实就是mysql的增强版
在mysql中只是数据库,并没有读写分离和分库分表,这些操作全部都是由mycat进⾏实现
主从复制(数据同步)功能mycat没有,必须要使⽤mysql所提供的
2.什么是mycat
at是开源的 并且⾯向⼤型企业的⼤数据库集群
2.2.⽀持事务、ACID、可以替代MySQL的加强版数据库,⽬前为⽌已经⽀持了很多数据库(内存数据库(NOSQL:redis,mongoDB…),关系型数据库⼀样⽀持(MySQL、Oracle、DB2、SQL Server、PostgreSQL…))
2.3.代替了昂贵的oracle(Oracle在四年前单节点⼀年10万块,在那个时候mysql⽐较弱)
at是⼀个HDFS⼤数据的新型SQL Server(SQL引擎,SQL服务器)
其实mycat沿⽤了Hadoop的HDFS概念–>只是mycat把F变为了D
3.什么是HDFS
H:Hadoop
D:Distributed
F:File
S:System
Hadoop(⼤数据)的分布式⽂件存储系统
什么是⼤数据:
数据量⾮常⼤并且以⽂件的形式保存称之为⼤数据
mycat:
H:High(Big Data)
D:Distributed
D:Data(关系型数据库中所保存的数据)
S:System
分库分表
4.1.什么是分库分表
在同⼀个系统(项⽬)中,把⼀张数据⽐较多的表放到不同的集群节点上,这种模式就称之为分库分表
4.2.需求
使⽤mycat实现分库分表(HDFS:namenode datanode condarynamdenode)
在整个mycat中也会使⽤到namenode和datanode
mysql01服务器(linux)192.168.23.129:
mysql数据库
teach(真实的库)
student(表)
mysql02服务器(linux)192.168.23.130:
mysql数据库
teach(真实的库)
student(表)
使⽤mycat(192.168.23.164)把数据分别存放在两个student中,也就是说这两张student表合在⼀起才是⼀个完整的数据表
mycat --> mysql01存⼊⼀条数据
mycat --> mysql02存⼊⼀条数据
依次交替
4.3.配置mycat
4.3.1.规定linux的⽤户名和全名不能叫mycat否则mycat会不⽣效(原因是影响整个linux系统的环境变量导致mycat的配置环境变量没有⽣效)
婴儿呼吸急促
4.3.2.vim /etc/sysconfig/network也不能叫mycat
4.at使⽤的是Java语⾔编写-->所以必须要在linux上配置jdk(要求jdk必须为64位,因为mycat是在64位的jdk8上进⾏编译的)
4.3.4.配置jdk
4.3.
5.使⽤xftp把mycat的压缩包上传到linux服务器上
4.3.6.解压mycat压缩包
tar -zxvf xxxxx
4.3.7.配置mycat的环境变量
也要进⼊
vim /etc/profile
在⽂档的后⾯配置
export MYCAT_HOME=mycat安装的地址
在exprot PATH后⾯要配置上
$MYCAT_HOME/bin
这个配置必须配置在PATH的上⾯,不然会加载错误
4. 3.7.1 进⼊mycat的从conf⽬录
mycat的三个核⼼配置⽂件
所有的读写分离/分库分表都必须要在这三个配置⽂件完成
mycat的conf⽬录
第⼀:配置l⽬录,只需配置ur标签⾥内容就⾏
配置了mycat的⽤户(账号:root 密码:root) --> 账号和密码 可以根据情况随意更改
ur标签的name=‘root’就是你的登陆数据库的账号:⼀般⽤root
property标签的name=password 就是你的登陆密码,视⾃⼰情况⽽定。
property标签的name=schemas 这个是你数据库的名字,schemas中的配置和mysql的数据库可以⼀样,也可以不⼀样
mycat也是可以直接使⽤数据库连接软件进⾏连接的
整个ur标签中就是配置了mycat的账号和密码
name===》就是mycat的账号
defaultAccount====》表⽰该账号为管理员账号,⽽且只能出现⼀次
property:属性标签
password===》就是name的密码
⽆论是账号还是密码都可以随意定制,开⼼就好
readOnly:只读(该账号只能查询数据,不能写⼊数据)
schemas:指向的是mycat的数据库(mycat的虚拟库这个库并不是真实存在的, 是需要,通过mysql的数据库进⾏映射的),⼀个mycat 中可以有多个schema
隐藏mysql的真实库的名字
连接mysql:
jdbc:mysql:localhost:3306/数据库名
连接mycat:
jdbc:mysql:ip地址:端⼝号/mycat的虚拟库名
这个l 只需要配置ur标签下的内容就可以了。
<ur name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TEACH</property>
</ur>
第⼆步:配置l:
mycat的规则
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licend under the Apache Licen, Version 2.0 (the "Licen");
- you may not u this file except in compliance with the Licen. - You
may obtain a copy of the Licen at - - www.apache/licens/LICENSE-2.0  - - Unless required by applicable law or agreed to in writing, software -
distributed under the Licen is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the  Licen for the specific language governing permissions and - limitations
under the Licen. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="io.mycat/">
<!--
所有的规则配置⼀个tableRule对应⼀个function,如果需要进⾏配置必须要配置⼀对,不能单独配置⼀个(如果单独配置了⼀个的情况下,mycat启动的时候会直接报错)
⼀共有⼗种规则:
·在这⾥我们只⽤到这⼀种,所以只配置这⼀种就可以了,其他没⽤的可以删掉
mod-long:(轮询)
mysql01
mysql数据库
teach
student
mysql02
mysql数据库
teach
student
当客户端发送请求===插⼊数据===》mycat===请求mysql===》
会把第⼀条数据插⼊进mysql01,
会把第⼆条数据插⼊进mysql02
依次循环
-
->
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
杨绛传
<function name="mod-long" class="ute.function.PartitionByMod">
<!--
代表了datanode的节点数量
如果只有两台datanode就必须要写2
-
->
<property name="count">2</property>
1厘米等于多少米</function>
</mycat:rule>
第三步:配置l:
matla
实现了读写分离和分库分表的具体配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="io.mycat/">
<!--
schema标签的name属性值必须要和l中的schames保持⼀致
schema就类似于mysql的数据库
schema就类似于mysql的数据库
checkSQLschema:检查SQL语句是否错误(lect * from ur wher id = 1)
默认值为fal,不需要改为true,把对SQL语句的检查交给mysql处理
sqlMaxLimit:最⼤执⾏SQL语句的数量
⼀次性可以执⾏多少条SQL语句
在schame标签中有table标签,这个标签就是定义了mycat中的表
类似于mysql数据库中的表
和mysql中的表名可以重复也可以不⼀致
dataNode:数据节点
在HDFS中存放数据
在mycat中映射的就是真实mysql数据库(可以有多个,也可以只有⼀个),名字可以随意起
今天的⽬标是实现分库分表,需要⽤到两台mysql数据库,所以只需要配置dn1和dn2
rule:配置规则
配置⼀定要和l中保持⼀致
讲纪律-->
<schema name="TEACH" checkSQLschema="fal" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="mycat_student" dataNode="dn1,dn2" rule="mod-long" />
</schema>
<!--
datanode标签对应的是table标签中的datanode属性
也就是说datanode属性值必须要和dataNode的标签name属性值保值⼀致
dn1:代表了mysql01服务器==》mysql数据库
dn2:代表了mysql02服务器==》mysql数据库
dataHost:才是真正的配置了分库分表和读写分离的核⼼配置
databa:映射的是真实mysql的数据库名
-->
<dataNode name="dn1" dataHost="localhost1" databa="mysql01" />
<dataNode name="dn2" dataHost="localhost2" databa="mysql02" />
<!--
dataHost标签必须要和dataNode标签中的dataHost属性保持⼀致
如果dataHost属性名重复了,映射的是同⼀个dataHost
每⼀个dataHost标签就是⼀个真实的mysql数据库
maxCon:最⼤连接数
minCon:最⼩连接数
中国八大名菜
balance:负载均衡
writeType:写⼊的类型(读写分离使⽤)
switchType:转换的类型(读写分离所使⽤的数据)
dbType:数据库的类型(在最早的版本mycat只⽀持mysql⼀种数据库,
后来发展⽀持很多种数据库)
dbDriver:数据库驱动(使⽤本地驱动,使⽤的是mycat所提供的驱动)
master:主节点
slave:从节点
threshold:⼊⼝
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">    <!--
heartbeat:⼼跳
mycat⼀直在监视mysql的ur表(⼼跳),
如果⼀旦发现mysql的ur不再有⼼跳,就会认为这⼀台mysql处于宕机状态,
也就不会再向这⼀台mysql进⾏做增删改查的操作
-->
<heartbeat>lect ur()</heartbeat>
<!--
writeHost:标签是该台mysql数据库为读和写的数据库
readHost:标签是该台mysql数据库为读的数据库
writeHost如果单独存在,标识该台mysql数据库为读和写的操作
如果⼀旦和readHost⼀起使⽤,writeHost就只能做些的操作,
所有的读操作都使⽤readHost完成
readHost必须要配置在writeHost的内容,不允许单独存在
host:属性只是标识了该台数据库的操作的内容,可以随意定义
url:数据库的url
jdbc:mysql://localhost:3306
如果配置了两个writeHost,那么host的值就必须不能重复
-->
<writeHost host="write01" url="192.168.23.129:3306" ur="root"
password="root" />
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
<heartbeat>lect ur()</heartbeat>
<writeHost host="write02" url="192.168.23.130:3306" ur="root"
password="root" />
</dataHost>
<!--
mycat中所映射的真实mysql的表必须要mycat所声明的table的名字保持⼀致
也就是说mycat的表名必须要和mysql的表名⼀模⼀样,否则映射不到
-->
</mycat:schema>
其实mycat也可以看成是⼀个数据库,只是这个数据库是虚拟的,把真实的mysql数据中的表数据映射进了虚拟库中,使⽤Java项⽬连接的时候只需要连接mycat即可,不再需要连接mysql
4.3.8.启动mycat
进⼊mycat的bin⽬录
./mycat console
或者在任意的位置直接使⽤
mycat console
console | start | stop | restart | status | dump
启动mycat:
mycat console 类似于IDEA中控制台,mycat会把⽇志打印出来
mycat start 就是正常启动
⼀般情况下推荐使⽤console启动
⼀旦启动mycat就关不掉,kill -9关不掉 除⾮重启或者关机
亲吻的好处
看到以下信息说明启动成功:
jvm 1    | MyCAT Server startup successfully. e logs in logs/mycat.log
4.3.9
注意报错:
Caud by: fig.util.ConfigException: Illegal table conf : table [ MYCAT_STUDENT ] rule function [ mod-long ] partition size : 3 > table datanode size : 2, plea make sure table datanode size = function partition
这个问题是因为l 中节点数的的数⽬配置的不对
修改下这就可以了
<property name="count">2</property>
启动成功后可以直接使⽤数据库连接⼯具连接mycat
猴痘症状mycat的dbType配置的是什么数据库,就使⽤这⼀种数据库进⾏连接即可
mycat有两个端⼝号:

本文发布于:2023-06-16 08:26:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/966551.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   配置   数据   分表   分库   标签
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图