MyCat教程三:安装及配置介绍[通俗易懂]

MyCat教程三:安装及配置介绍[通俗易懂]一、安装MyCat 1.安装准备环境 1.1 安装JDK   因为MyCat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的。 1.2 放开相关端口   在主从节点…

一、安装MyCat

1.安装准备环境

1.1 安装JDK

  因为MyCat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的。
在这里插入图片描述

1.2 放开相关端口

  在主从节点上都放开对端口3306的访问,或者直接关闭防火墙

# 临时关闭
service iptables stop
service iptables start
# 永久关闭
chkconfig iptables on
chkconfig iptables off
# 查看防火墙状态
service iptables status

代码100分

 

1.3 root账号

  MyCat是我们的数据库中间件,那么MyCat必然要能够访问对应的主从数据库,所以在主从数据库中我们需要分别创建访问的账号。

代码100分grant all privileges on *.* to "root"@"%" identified by "123456" with grant option;
flush privileges;
 

2.安装MyCat

2.1 下载安装软件

官网地址:http://www.mycat.io/

在这里插入图片描述

2.2 上传解压安装

  将下载的文件上传到/usr/local目录下,并解压

在这里插入图片描述

2.3 目录介绍

  解压后的目录结构如下:

在这里插入图片描述

目录 描述
bin 目录里是启动脚本
conf 目录里是配置文件
catlet 为 MyCat 的一个扩展功能
lib 目录里是 MyCat 和它的依赖 jar
logs 目录里是 console.log 用来保存控制台日志,和 MyCat.log 用来保存 MyCat 的 log4j日志

二、相关配置文件介绍

  MyCat的架构其实很好理解,MyCat是代理,MyCat后面就是物理数据库。和Web服务器的 Nginx类似。对于使用者来说,访问的都是 MyCat,不会接触到后端的数据库。

在这里插入图片描述

注意:MyCat的主要配置文件都在conf目录下。我们给大家来介绍下介个核心的配置文件

配置文件 说明
server.xml MyCat 的配置文件,设置账号、参数等
schema.xml MyCat 对应的物理数据库和数据库表的配置
rule.xml MyCat 分片(分库分表)规则

2.1 server.xml

  server.xml是用来配置账号,参数及相关操作权限的文件,下面是给文件的简要内容,去掉了相关的注释

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
		<property name="useSqlStat">0</property> 
		<property name="useGlobleTableCheck">0</property>  
		<property name="sequnceHandlerType">2</property>
		<property name="processorBufferPoolType">0</property>
		<property name="handleDistributedTransactions">0</property>
		<property name="useOffHeapForMerge">1</property>
		<property name="memoryPageSize">1m</property>
		<property name="spillsFileBufferSize">1k</property>
		<property name="useStreamOutput">0</property>
		<property name="systemReserveMemorySize">384m</property>
		<property name="useZKSwitch">true</property>
	</system>
	<!-- 全局SQL防火墙设置 -->
	<!-- 
	<firewall> 
	   <whitehost>
	      <host host="127.0.0.1" user="mycat"/>
	      <host host="127.0.0.2" user="mycat"/>
	   </whitehost>
       <blacklist check="false">
       </blacklist>
	</firewall>
	-->	
	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>
</mycat:server>
 

system标签中设置的是系统级别的相关参数,参考源文件中的注释即可能看懂,初始默认即可
user标签是我们要注意的地方。MyCat 中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等
说明:上面的默认的配置表示 创建的有两个用户rootuser账号
  root 账号,密码是123456,对应的逻辑库是 TESTDB
  user 账号,密码是user,对应的逻辑库是 TESTDB,权限是只读

注释掉的privileges 表示root用户的操作权限

参数 说明 事例
dml insert,update,select,delete 0000

dml 权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000–> 1111,0 为禁止权限,1 为开启权限

2.2 schema.xml

  schema.xml 是最主要的配置文件,首先看默认的配置文件

代码100分<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
		<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
		<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
		<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />
		<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
		<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">
			<childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">
				<childTable name="order_items" joinKey="order_id" parentKey="id" />
			</childTable>
			<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" />
		</table>
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="localhost:3306" user="root"
				   password="123456">
			<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
		</writeHost>
		<writeHost host="hostS1" url="localhost:3316" user="root"
				   password="123456" />
	</dataHost>
</MyCat:schema>
 

2.2.1 主要节点介绍

  在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode 等信息.

节点 描述
schema 配置逻辑库,name 与 server.xml 中 schema 对应
dataNode 定义数据节点的标签,也就是分库相关配置
dataHost 物理数据库,真正存储数据的数据库

2.2.2 节点及相关属性介绍

2.2.2.1 schema

属性name

逻辑库名称
 

属性checkSQLschema

是否检测 SQL 语法中的 schema 信息. 如: MyCat逻辑库名称 A, dataNode 名称 B
SQL : select * from A.table;
checkSQLschema 值是 true, MyCat发送到数据库的 SQL 是 select * from table;
checkSQLschema 只是 false,MyCat发送的数据库的 SQL 是 select * from A.table;
 

属性sqlMaxLimit

MyCat 在执行 SQL 的时候,如果 SQL 语句中没有 limit 子句.自动增加 limit 子句. 避免一次
性得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果 SQL中有具体的 limit
子句,当前属性失效.
SQL : select * from table . MyCat解析后: select * from table limit 100
SQL : select * from table limit 10 . MyCat 不做任何操作修改.
 

标签 table

定义逻辑表的标签
 

属性 name

逻辑表名
 

属性 dataNode

数据节点名称. 即物理数据库中的 database 名称.多个名称使用逗号分隔.
 

属性 rule

分片规则名称.具体的规则名称参考 rule.xml 配置文件.
 

2.2.2.2 dataNode

属性 name

数据节点名称, 是定义的逻辑名称,对应具体的物理数据库 database
 

属性 dataHost

引用 dataHost 标签的 name 值,代表使用的物理数据库所在位置和配置信息.
 

属性 database

在 dataHost 物理机中,具体的物理数据库 database 名称.
 

2.2.2.3 dataHost

属性 name

定义逻辑上的数据主机名称
 

属性 maxCon/minCon

最大连接数, max connections
最小连接数, min connections
 

属性 dbType

数据库类型 : mysql 数据库
 

属性 dbDriver

数据库驱动类型, native,使用 MyCat提供的本地驱动.
 

dataHost 子标签 writeHost

写数据的数据库定义标签. 实现读写分离操作.
 

属性 host

数据库命名
 

属性 url

数据库访问路径
 

属性 user

数据库访问用户名
 

属性 password

访问用户密码
 

writeHost 子标签 readHost
属性 host

数据库命名
 

属性 url

数据库访问路径
 

属性 user

数据库访问用户名
 

2.3 rule.xml

  用于定义分片规则的配置文件。mycat 默认的分片规则: 以 500 万为单位,实现分片规则.逻辑库 A 对应 dataNode – db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推.

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="rule1">
		<rule>
			<columns>id</columns>
			<algorithm>func1</algorithm>
		</rule>
	</tableRule>
	<tableRule name="rule2">
		<rule>
			<columns>user_id</columns>
			<algorithm>func1</algorithm>
		</rule>
	</tableRule>
	<tableRule name="sharding-by-intfile">
		<rule>
			<columns>sharding_id</columns>
			<algorithm>hash-int</algorithm>
		</rule>
	</tableRule>
	<tableRule name="auto-sharding-long">
		<rule>
			<columns>id</columns>
			<algorithm>rang-long</algorithm>
		</rule>
	</tableRule>
	<tableRule name="mod-long">
		<rule>
			<columns>id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>
	<tableRule name="sharding-by-murmur">
		<rule>
			<columns>id</columns>
			<algorithm>murmur</algorithm>
		</rule>
	</tableRule>
	<tableRule name="crc32slot">
		<rule>
			<columns>id</columns>
			<algorithm>crc32slot</algorithm>
		</rule>
	</tableRule>
	<tableRule name="sharding-by-month">
		<rule>
			<columns>create_time</columns>
			<algorithm>partbymonth</algorithm>
		</rule>
	</tableRule>
	<tableRule name="latest-month-calldate">
		<rule>
			<columns>calldate</columns>
			<algorithm>latestMonth</algorithm>
		</rule>
	</tableRule>
	<tableRule name="auto-sharding-rang-mod">
		<rule>
			<columns>id</columns>
			<algorithm>rang-mod</algorithm>
		</rule>
	</tableRule>	
	<tableRule name="jch">
		<rule>
			<columns>id</columns>
			<algorithm>jump-consistent-hash</algorithm>
		</rule>
	</tableRule>
	<function name="murmur"
		class="io.mycat.route.function.PartitionByMurmurHash">
		<property name="seed">0</property><!-- 默认是0 -->
		<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
		<property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
		<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
		<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
			用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
	</function>
	<function name="crc32slot"
			  class="io.mycat.route.function.PartitionByCRC32PreSlot">
		<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
	</function>
	<function name="hash-int"
		class="io.mycat.route.function.PartitionByFileMap">
		<property name="mapFile">partition-hash-int.txt</property>
	</function>
	<function name="rang-long"
		class="io.mycat.route.function.AutoPartitionByLong">
		<property name="mapFile">autopartition-long.txt</property>
	</function>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">3</property>
	</function>
	<function name="func1" class="io.mycat.route.function.PartitionByLong">
		<property name="partitionCount">8</property>
		<property name="partitionLength">128</property>
	</function>
	<function name="latestMonth"
		class="io.mycat.route.function.LatestMonthPartion">
		<property name="splitOneDay">24</property>
	</function>
	<function name="partbymonth"
		class="io.mycat.route.function.PartitionByMonth">
		<property name="dateFormat">yyyy-MM-dd</property>
		<property name="sBeginDate">2015-01-01</property>
	</function>	
	<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
        	<property name="mapFile">partition-range-mod.txt</property>
	</function>	
	<function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
		<property name="totalBuckets">3</property>
	</function>
</mycat:rule>
 

简化版

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	<tableRule name="mod-long">
		<rule>
			<columns>id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>	
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">3</property>
	</function>
</mycat:rule>
 

由上我们可以发现在rule.xml文件中,核心的标签就两个tableRulefunction,我们分别来介绍下

2.3.1 tableRule

  是用来声明table的分片规则的,相关属性及标签的含义如下

节点 描述
name 属性指定唯一的名字,用于标识不同的分片规则。内嵌的
rule 标签则指定对物理表中的哪一列进行拆分和使用什么分片算法
columns 指定要拆分的列名字
algorithm 使用 function 标签中的 name 属性。连接表规则和具体分片算法。 table 标签内使用。让逻辑表使用这个规则进行分片

2.3.2 function

  指定分片规则的算法的具体实现

节点 描述
name 指定算法的名字
class 制定分片算法具体的类名字
property 为具体算法需要用到的一些属性

ok~MyCat的安装及相关配置介绍就介绍到此,下篇我们介绍通过MyCat来具体实现读写分离

 


关注微信公众号【程序员的梦想】,专注于Java,SpringBoot,SpringCloud,微服务,Docker以及前后端分离等全栈技术。 

MyCat教程三:安装及配置介绍[通俗易懂]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11147.html

(0)
上一篇 2022-12-15
下一篇 2022-12-15

相关推荐

  • PostgreSQL免费公开课第17期-full-page写操作机制

    PostgreSQL免费公开课第17期-full-page写操作机制十七、PostgreSQL full-page写操作机制 1、阐述full-page写操作特点 2、为什么要full-page写操作 3、什么时候进行full-page写操作 4、与其它数据库类似技…

    2023-03-22
    153
  • 常见SQL编写和优化[通俗易懂]

    常见SQL编写和优化[通俗易懂]常见的SQL优化方式 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where及order by 涉及的列上建立索引 。 2. 应尽量 避免 在 where 子句中对字段进行null 值判断

    2022-12-24
    144
  • MySQL的事务隔离级别「终于解决」

    MySQL的事务隔离级别「终于解决」数据库事务的四大特性 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomici

    2023-03-16
    175
  • 了解Python中的float函数

    了解Python中的float函数在Python编程中,很多情况下需要用到数字,而数字又分为整数和浮点数。其中浮点数是一种有小数点的数字类型。在这篇文章中,我们将会深入了解Python语言中float函数的用法以及相关知识。

    2024-06-15
    63
  • Python Model使用说明

    Python Model使用说明Python作为一种高级编程语言,拥有丰富的模块和库,让开发者可以更方便、快捷地完成各种任务。在这篇文章中,我们将介绍Python Model的使用方法,帮助读者更加深入地了解Python的强大功能。

    2024-05-13
    68
  • Python二进制

    Python二进制在计算机科学中,二进制是一种用于数字表示和信息处理的方法,用2个数字0和1来表示。Python作为一种高级编程语言,天然支持二进制表示,因此Python的二进制编程也具有高度的可读性和易用性。本文将介绍一些Python中用于处理二进制数据的函数和方法,并探讨如何使用Python进行二进制编程。

    2024-06-08
    53
  • 将Django Model转换为字典格式的实用函数

    将Django Model转换为字典格式的实用函数在Django应用程序中,进行数据库操作主要使用Django的ORM框架,这个框架可以方便的将数据库中的表映射成为Python类,然后通过这个类就可以进行数据库的增删改查等操作了。ORM框架提供了manager、queryset等对象来帮助我们更加方便的操作数据库。然而,在一些情况下,我们需要将Django的Model对象转换成Python字典,以便于对返回数据进行处理、或者我们希望将Model对象序列化成JSON字符串。这篇文章将介绍从Django Model转换为Python字典的实用函数。

    2024-04-09
    73
  • Python打印函数printme的使用方法

    Python打印函数printme的使用方法a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-03-05
    82

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注