mysql学习笔记(12)之mycat


内容来源为六星教育,这里仅作为学习笔记

Windows下连接mycat

注意:使用mycat需要先安装jdk1.7以上
jdk安装参考这里:http://www.cnblogs.com/llhhll/p/9257764.html

第一步:从官网下载解压后目录如下(1.6版本)

下载地址:https://github.com/MyCATApache/Mycat-download

第二步:正常启动bin文件下

启动startup_nowrap ,直接双击运行 startup_nowrap.bat

或者使用Navicat工具去连接(但是响应时间会很长,不建议使用),推荐使用cmd命令连接mycat

Linux下连接mycat

安装java

  1. 去Oracle官网下载需要安装的jdk版本,我这里用的是jdk-8u181-linux-x64.tar.gz
  2. 将该压缩包放到/usr/local/jdk目录下,jdk目录需要自己手动创建,也可以叫java,名字自己随意取(见名知意),然后解压该压缩包,输入如下指令:

[root@localhost home]# tar -zxvf jdk-8u20-linux-x64.tar.gz

接下来就该配置环境变量了,输入以下指令进行配置:

[root@localhost home]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

注意:第一行的JAVA_HOME=/usr/local/java此处等号右边的是自己的jdk实际解压目录。如果不是该目录则需要改成自己的实际目录,其他不变

编辑完之后,保存并退出,然后输入以下指令,刷新环境配置使其生效:

[root@localhost home]# java
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索
进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名

linux连接mycat

安装要求:jdk版本在8或者以上
Mycat属于开箱即用的产品类型,不需要我们做过多的安装操作。

Mycat命令:
Mycat start –启动mycat  后台进程方式启动
Mycat restart –重启mycat
Mycat stop –停止mycat
Mycat console --启动并控制台打印日志
Mycat dump –数据导出

连接命令:
mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB --default_auth=mysql_native_password

下载安装包、并解压

[root@localhost home]# tar -zxvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz

复制到/usr/local/目录下

[root@localhost home]# cp -r mycat /usr/local/mycat
[root@localhost home]# cd /usr/local/mycat
[root@localhost mycat]# ll
总用量 12
drwxr-xr-x 2 root root 190 5月 15 03:37 bin
drwxr-xr-x 2 root root 6 5月 15 03:37 catlet
drwxr-xr-x 4 root root 4096 5月 15 03:37 conf
drwxr-xr-x 2 root root 4096 5月 15 03:37 lib
drwxr-xr-x 2 root root 77 5月 15 03:38 logs
drwxr-xr-x 2 root root 6 5月 15 03:38 tmlogs
-rwxr-xr-x 1 root root 227 5月 15 03:37 version.txt
[root@localhost mycat]#

启动mycat

[root@localhost mycat]# cd bin
[root@localhost bin]# ./mycat
Usage: ./mycat { console | start | stop | restart | status | dump }
[root@localhost bin]# ./mycat console
Running Mycat-server...
Mycat-server is already running.
[root@localhost bin]#

连接mycat

[root@localhost bin]# mysql -uroot -p123456 -P8066 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (HY000): Access denied for user 'root', because password is error

这是由于Mysql 8的缺省加密方式已经改为caching_sha2_password,而MyCat对此尚不支持。为此,需加上–default_auth=mysql_native_pasowrd选项:

mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB --default_auth=mysql_native_password

下面是连接测试:

[root@localhost bin]# mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB --
default_auth=mysql_native_password
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.29-mycat-1.6.7.3-release-20190828215749 MyCat Server (OpenCloudDB)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

mycat用户与数据表配置

mycat用户配置

server.xml 几乎保存了所有mycat需要的系统配置信息,包括 mycat 用户管理、DML权限管理等,其在代码内直接的映射类为SystemConfig 类。
Mycat 1.6的用户权限管理是通过server.xml实现的。在server.xml中通过用户标签和防火墙标签进行配置管理的

  1. user标签(用户标签)
<user name="test">
	<property name="password">test</property>
	<property name="schemas">TESTDB</property>
	<property name="readOnly">true</property>
	<property name="benchmark">11111</property>
	<property name="usingDecrypt">1</property>
	<privileges check="false">
		<schema name="TESTDB" dml="0010" showTables="custome/mysql">
			<table name="tbl_user" dml="0110"></table>
			<table name="tbl_dynamic" dml="1111"></table>
		</schema>
	</privileges>
</user>
  1. 用户属性标签
    (1)设置password属性,设置用户的密码
    (2)修改 readOnly 为 true 或 false 来限制用户对数据库是否可读写的权限,true为只读,
    false为读写
    (3)修改 schemas 内的文本来控制用户可放问的 schema,多个schema用,号隔开
    (4)设置benchmark属性:benchmark 基准, 当前端的整体 connection 数达到基准值是, 对来自该
    账户的请求开始拒绝连接,0 或不设表示不限制。
    (5)设置usingDecrypt属性:是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码
    加密,加密命令方法是执行mycat的jar程序:
    java -cp Mycat-server-1.6.1-dev.jar org.opencloudb.util.DecryptUtil0:user:password
mycat数据表配置
  1. schema标签
    用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库。如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。
    逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。
    注意:进行查询的时候需要在server.xml配置相关用户权限信息

    dataNode:该标签用于绑定逻辑库到某个具体的database上
    checkSQLschema :当该值为true时,例如我们执行语句select * from TESTDB.company 。
    mycat会把语句修改为 select * from company 去掉TESTDB
    sqlMaxLimit :该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。需要注意的是,如果运行的schema为非拆分库的,那么该属性不会生效。需要自己sql语句加limit。

  2. table 标签
    table标签定义了mycat中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
    name属性:name属性代表了逻辑表的表名,同一个schema中name标签中定义的名字必须唯一。如同我们在数据库执行create table 命令指定的名字一样。
    dataNode属性:定义这个逻辑表所属的dataNode,该属性的值需要和dataNode标签中的name值相对应。如果需要定义的dn非常多,可以使用如下方法定义
    rule属性:该属性指定逻辑表使用的规则名字,规则名字在rule.xml中定义,必须与tableRule标签中name属性对应。
    ruleRequired属性:该属性用于指定是否绑定分片规则,如果配置为true,但是没有配置具体rule时候,就会报错
    primaryKey属性:该属性代表了,逻辑表对应真实表的主键。例如:分片的规则是使用非主键进行分片的,那么在使用主键查询的时候,就会发送查询语句到所有配置的DN上,如果使用该属性配置真实表的主键,那么mycat会缓存主键与具体DN的信息,那么再次使用非主键进行查询的时候就不会进行广播式的查询,就会直接发送语句给具体的DN,但是尽管配置该属性,如果缓存并没有命中的话,还是会发送语句给具体的DN 来获取数据。
    type属性:该属性定义了逻辑表的类型,目前逻辑表只有全局表和普通表

  3. dataNode标签
    datanode标签定义了mycat中的数据节点,也就是我们所说的数据分片。一个datanode标签就是一个独立的数据分片。例子中的表述的意思为,使用名字为localhost1数据库实例上的mytest物理数据库,这就组成一个数据分片,最后我们用dn1来标示这个分片。
    name:定义数据节点的名字,这个名字需要唯一。我们在table标签上用这个名字来建立表与分片对应的关系
    dataHost:用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应
    database:用于定义该分片属于数据库实例上 的具体库。

  4. dataHost标签
    这个标签直接定义了具体数据库实例,读写分离配置和心跳语句。

    name:唯一标示dataHost标签,供上层使用
    maxCon:指定每个读写实例连接池的最大连接。
    minCon:指定每个读写实例连接池的最小连接,初始化连接池的大小

    balance:负载均称类型:

    0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
    1:全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式
    (M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
    2:所有读操作都随机的在writeHost、readHost上分发
    3:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。

    writeType属性:负载均衡类型。
    0:所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个。切换记录在文件
    dnindex.properties
    1:所有的鞋操作都随机的发送到配置的writeHost,1.5以后版本废弃不推荐。
    switchType属性
    -1 不自动切换
    1 默认值 自动切换
    2 基于MySql主从同步的状态决定是否切换
    心跳语句为 show slave status
    3 基于mysql galary cluster 的切换机制(适合集群)1.4.1心跳语句为 show status like ‘wsrep%’

dbType:指定后端链接的数据库类型目前支持二进制的mysql协议,还有其他使用jdbc链接的数据库,例如:mongodb,oracle,spark等

dbDriver属性:指定连接后段数据库使用的driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。

如果使用JDBC的话需要符合JDBC4标准的驱动jar 放到mycat\lib目录下,并检查驱动jar包中包括如下目录结构文件 META-INF\services\java.sql.Driver。 在这个文件写上具体的driver类名,例如com.mysql.jdbc.DriverwriteHost readHost

指定后端数据库的相关配置给mycat,用于实例化后端连接池。

实例

server.xml 几乎保存了所有 mycat 需要的系统配置信息。

<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="benchmark">11111</property>
<property name="usingDecrypt">1</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" showTables="custome/mysql">
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic" dml="1111"></table>
</schema>
</privileges>
</user>

server.xml 中的标签本就不多,这个标签主要用于定义登录 mycat 的用户和权限。

例如上面的例子中,我定义了一个用户,用户名为 test、密码也为 test,可访问的 schema 也只有 TESTDB 一个。

如果我在 schema.xml 中定义了多个 schema,那么这个用户是无法访问其他的 schema。在 mysql 客户端看来 则是无法使用 use 切换到这个其他的数据库。

property 标签则是具体声明的属性值,正如上面的例子。

我们可以修改 user 标签的 name 属性来指定用户名;修改 password 内的文本来修改密码;修改 readOnly 为 true 或 false 来限制用户是 否只是可读的;修改 schemas 内的文本来控制用户可放问的 schema;修改 schemas 内的文本来控制用户可访 问的 schema,同时访问多个 schema 的话使用 , 隔开,例如:

<property name="schemas">TESTDB,db1,db2</property>

Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以 及 DataSource。弄懂这些配置,是正确使用 MyCat 的前提。这里就一层层对该文件进行解析。
配置表的分片数,切分规则

<table name="order" primaryKey="ID" subTables="order$0-9" dataNode="dn1"      rule="mod-long" />

配置表数据节点
配置表数据来源

rule文件

rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法, 或者对表使用相同的算法但具体的参数不同。这个文件里面主要有 tableRule 和 function 这两个标签。在具体使 用过程中可以按照需求添加 tableRule 和 function。

<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值