Mycat个人心得笔记(五)

8 篇文章 0 订阅

                            Mycat个人心得笔记(五)


目录

                            Mycat个人心得笔记(五)

一.mycat的配置文件

1.配置文件

2.备份文件

1.server.xml

2schema.xml

3.rule.xml

4.mycat测试案例


一.mycat的配置文件

  • 根目录在conf中有两个核心的配置文件,配置内容实现:
  • 读写分离,高可用替换,分布式存储,ER分片表的逻辑。

1.配置文件

2.备份文件

备份:后缀.back为备份文件

  • server.xml:配置当前mcyat启动的资源设定(例如端口占用,线程登录名,密码等)
  • schema.xml:逻辑库,逻辑表,分片表,ER表的配置,底层链接的实际数据库信息。
     

1.server.xml

<?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:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
	<system>
	<property name="defaultSqlParser">druidparser</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
	<!-- <property name="processorBufferChunk">40960</property> -->
	<!-- 
	<property name="processors">1</property> 
	<property name="processorExecutor">32</property> 
	 -->
		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</property>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!-- 
			<property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
	    	<property name="mutiNodePatchSize">100</property> 亿级数量排序批量
			<property name="processors">32</property> <property name="processorExecutor">32</property> 
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
	</system>
	<user name="root">
		<property name="password">root</property>
		<property name="schemas">mytest</property>
	</user>

	<!-- 
	<quarantine> 
	   <whitehost>
	      <host host="127.0.0.1" user="mycat"/>
	      <host host="127.0.0.2" user="mycat"/>
	   </whitehost>
       <blacklist check="false"></blacklist>
	</quarantine>
	-->

</mycat:server>

1.system标签:定义了一大批的property属性内容,mycat软件,进程启动运行时加载的各种属性,使用的各种配置内容,不开启默认有值.

  • <property name="defaultSqlParser">druidparser</property> 拦截
  • 用户sql被拦截处理的实际执行者,根据定义的值(druidparser)去jar包中寻找配置的别名类
  • 剩下的property都是端口,线程资源数量,启动配置

2.user标签:定义连接mycat的用户信息(名,密码,能干什么)

<user name="user">

<property name="password">user</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>

</user>

  • <user name="user">

                             name属性定义就是用户名,

  • <property name="password">user</property>

                              password的property标签登录密码,

  • <property name="schemas">TESTDB</property>

                             schemas的property标签给TSETDB当前用户名可以访问的逻辑库schema.xml中配置的名称,

                             如果想要访问多个,需要用,隔开

                             TESTDB,MYCATDB,HAHADB

  • <property name="readOnly">true</property>

                             是否用户只读

  • 修改或添加成如下内容

   <user name="root">

        <property name="password">root</property>

       <property name="schemas">mytest</property>

    </user>

  • quarantine标签:与mycat定义的安全信息有关

<whitehost>

      <host host="127.0.0.1" user="mycat"/>

      <host host="127.0.0.2" user="mycat"/>

</whitehost>

  • whiteHost标签:白名单ip一旦配置,进入的ip地址就会根据白名单筛选

<blacklist check="false"></blacklist>

  • blackList标签:黑名单sql,满足黑名单配置的sql语句不予执行

<blacklist check="false">selectAllow</blacklist>

  • 不会允许任何人在mycat执行select操作;

<blacklist check="false">selectAllColumnAllow</blacklist>

  • 不允许使用select * from table来执行sql语句

2schema.xml

1.mycat数据库内部结构的概念

  • 逻辑库:mycat维护的内存中的对象,对外使用的客户端看到的库名称,实际数据库可能存在可能不存在(名称),数据来源可以被整合;

  • 逻辑表:逻辑库数据结构的具体体现

  • 非分片表:全部表格数据来自一张后端的真实数据库表格
  • 分片表:总体数据量庞大(商品,订单,订单商品),需要切分计算到不同分片处理
    • 全局表:多个分片复制同一张表格存储使用
    • ER表:涉及到多个表格分片关联关系

2.schema标签

一个schema标签定义一个逻辑库

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

  • name属性:逻辑库的名称,可以和后端数据库不一致

checkSQLschema:

  • false 不自动添加连接访问的table的逻辑库名称,

select * from user where id=5;原封不动的发送给mycat处理 (容易出错)

  • true 自动添加没有库名称sql语句的逻辑库名称

select * from user where id=5;到达mycat时会变成select * from mytest.user where id=5

sqlMaxLimit:

  • 最大查询条数,保护措施,当用户没有天界limit关键字,mycat自动拼接limit 0,100的语句,保护查询中不会宕机;

3.tabal标签:定义逻辑表的标签内容

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

  • name:table逻辑表的名字;一般需要对应真实表格
  • dataNode:所有与分片计算有关的内容,都利用dataNode标签内容完成的,table中对应多个dataNode标签名称表示当前逻辑表示分片表
  • rule:只要是分片表格定义了rule,就会根据rule的值定义分片计算时的逻辑 auto-sharding-long 根据id切分,0-500w在第一个分片,500w-1000w在第二个分片,1000w-1500w在第三个分片(默认值)

4.childtable标签:表示一个table标签的子标签,定义的是一个逻辑库的子库,实现的内容是ER分片表;

<childTable name="orders" primaryKey="ID" joinKey="customer_id"  parentKey="id">

  • name:表格的名称, 
  • primaryKey:主键
  • joinKey:外键字段名称
  • parentKey:外键字段在主表中的字段名称

5.dataNode标签:定义当前mycat中的分片单位

<dataNode name="dn1" dataHost="localhost1" database="db1" />

  • name:所有的分片计算都会根据name来完成,
  • dataHost:指定一个当前分片管理的数据库结构的标签dataHost
  • database:当前分片下所有库的真实数据库名称

6.dataHost标签:管理一个数据库的集群,数据库连接,超时,空闲,读写分离的所有逻辑都是dataHost完成的

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 

writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

  • name:名称,对应dataNode里绑定的值
  • maxCon:连接数据库节点的最大谅解书
  • minCon:最小连接数
  • balance:读权限的定义
    • 0:不开启读的分离,所有的读操作都在第一个writeHost
    • 1:全部的readHost和备用writeHost都参与读数据的平衡,如果读的请求过多,负责写的第一个writeHost也分担一部分
    • 2:所有的读操作,都随机的在所有的writeHost和readHost中进行
    • 3:所有的读操作,都到writeHost对应的readHost上进行(备用writeHost不参加了),在集群中没有配置ReadHost的情况下,读都到第一个writeHost完成
  • writeType:写权限设定1值已经在1.5之后的mycat不建议了
    • 0:默认从第一个writeHost写数据
    • 1:老版本的继承,在多个writeHost时,作用是读写的随机进行;writeType=1屏蔽balcance
  • dbType:数据库的类型
  • dbDriver:mysql=native,oracle,sqlServer还得指定driver全路径名称,并且再lib中提供jar包.
  • switchType:故障转移的逻辑
    • 1    表示在多个writeHost直接故障切换
    • -1  不切换,只连接第一个writeHost
  • slaveThreshHold:定义的从节点读取数据的最大延迟;对应show slave status语句返回结果中一个字段,超过数值就不会再从从节点读取数据

7.heatbeat标签:mycat心跳检测每个数据库节点使用的sql语句,如果想让slaveThreshHold生效.必须使用 show slave status

<heartbeat>select user()</heartbeat>

8.writeHost标签:一个dataHost中维护的数据库主从高可用集群,writeHost作为写的主机,只能配置主节点

<writeHost host="hostM1" url="10.202.4.39:3306" user="root"

password="sf123456">

  • host:定义一个当前节点的代号,hostM1,hostM2,hostM3

9.readHost标签:一个dataHost中中维护的数据库主从高可用集群,readHost作为读的注解,主从节点都可以配置;

<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />

  • host:定义的代号,hostM1S1,hostM2S1

3.rule.xml

1.tableRule标签

<tableRule name="rule1">

<rule>

<columns>id</columns>

<algorithm>func1</algorithm>

</rule>

</tableRule>

  • name:属性就是定义的一个计算规则名称,必须对应schema.xml中table指定的rule属性
  • rule标签:定义计算规则
    • columns:可以用来计算分片的字段名称;逗号可以隔开多个分片计算字段
    • algorithm:算法的名称,对应rule.xml中一个function标签名称,指定使用的java代码

2.function标签

<function name="rang-long"

class="org.opencloudb.route.function.AutoPartitionByLong">

<property name="mapFile">autopartition-long.txt</property>

</function>

function中定义执行算法的class和mapFile(辅助文件)

3.观察autopartition-long.txt在mycat的conf文件夹中

# K=1000,M=10000.

0-500M=0

500M-1000M=1

1000M-1500M=2

在计算auto-sharding-long时,加载这个辅助的mapFile文件,可以根据配置内容定义分片计算整数值的范围;

 

# K=1000,M=10000.

0-30M=0

30M-60M=1

4.mycat测试案例

1.一个mycat中维护的各种不同结构的主从,分布式对应的所有标签含义

2.非分片表配置

  • 在数据库中(2个节点挑一个做,只使用其中一个),数据库mysql01,表格student();

  • server.xml在之前时就配置完毕了

  • schema.xml配置
​
<mycat:schema xmlns:mycat="http://org.opencloudb/" >

	<schema name="mytest" checkSQLschema="true" sqlMaxLimit="100">
		<table name="student" primaryKey="ID" dataNode="dn1"/>
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="mysql01" />
	<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="10.42.60.249:3306" user="root"
			password="root"/>
	</dataHost>

</mycat:schema>

​

IP需要换一下

修改xml

历经九九八十一难,终于超过了,浪费我一个小时。

老是卡在一个警告上面,又浪费我半个小时

Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (HY000): Access denied for user 'root' with host '10.42.60.249'

十万个曹尼玛在崩腾

  • show databases;
  • use mytest;
  • show tables;
  • select * from student;

查看数据库内容

添加语句

 

后面测试我单独写了篇博客去实现

https://mp.csdn.net/postedit/90759658

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值