目录
1.为了测试读写分离将数据库中双机热备关系挡掉(各自执行stop slave)
1.在配置文件中在writeType是0是对balance的值从0-3配置测试
2.schema.xml中配置writeHost readHost url指定错误
一.简介
一个mycat中维护的各种不同结构的主从,分布式对应的所有标签含义
二.非分片表配置
1.在数据库中使用单个节点
数据库mysql01,表格student();
2.server.xml在之前时就配置完毕了
3.schema.xml配置
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
#创建一个逻辑库mytest 自动追加逻辑库名 最大查询数
<schema name="mytest" checkSQLschema="true" sqlMaxLimit="100">
#创建一个非分片表 主键默认ID 一个分片
<table name="student" primaryKey="ID" dataNode="dn1"/>
</schema>
#真实存在的数据库名 mysql01
<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">
#sql语句
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.42.60.249:3306" user="root"
password="root"/>
#后端Mycat连接数据库
</dataHost>
</mycat:schema>
4.修改配置模板
IP需要换一下
5.修改xml
6.历经九九八十一难,终于过了,浪费我一个小时。
7.老是卡在一个警告上面,又浪费我半个小时
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'
PS:2019-7-31:补充解决方案
先关闭[root@liuyong mycat]# bin/mycat console 在运行即可 今天又遇到这个坑,忘记记录解决方法 现在补充下
十万个曹尼玛在崩腾
- show databases;
- use mytest;
- show tables;
- select * from student;
8.查看数据库内容
9.添加语句
10.测试案例的读写分离(多个节点)
dataHost中添加多个数据库多个writeHost readHost
11.模板,修改并存
<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.9.151.60:3306" user="root"
password="root"/>
<writeHost host="hostM2" url="10.9.104.184:3306" user="root"
password="root"/>
</dataHost>
12.登录测试
13.进入Mysql-Mycat中
14.进入表查看对应信息
因为两个数据库表的信息完全相同,不确定,查询的是哪个数据库
15.写操作的管理dataHost中writeType控制
1.为了测试读写分离将数据库中双机热备关系挡掉(各自执行stop slave)
在各自的数据库中,而不是在mycat中执行
2.俩边数据不同步
3.查看数据是 10.42.60.249的
4.查看写数据(读写都是在一个节点中写的)
5.修改对应配置
- writeType:写权限设定1值已经在1.5之后的mycat不建议了
- 0:默认从第一个writeHost写数据
- 1:老版本的继承,在多个writeHost时,作用是读写的随机进行;writeType=1屏蔽balcance
6.随机读取
16.读操作的配置
1.在配置文件中在writeType是0是对balance的值从0-3配置测试
- balance:读权限的定义
- 0:不开启读的分离,所有的读操作都在第一个writeHost
- 1:全部的readHost和备用writeHost都参与读数据的平衡,如果读的请求过多,负责写的第一个writeHost也分担一部分(读写分离)
- 2:所有的读操作,都随机的在所有的writeHost和readHost中进行
- 3:所有的读操作,都到writeHost对应的readHost上进行(备用writeHost不参加了),在集群中没有配置ReadHost的情况下,读都到第一个writeHost完成
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"/>
2.实现读写分离(设置为1)
三.分片表格的测试
1.关闭主从
必须保证两台数据库分离没有主从关系之前已经解除
2.创建数据
创建数据库中分片表格product表格
、
3.修改schema.xml配置
<table name="product" primaryKey="ID" dataNode="dn1,dn2"
rule="auto-sharding-long"/>
分片主要配置 rule 自动切分级别
<schema name="mytest" checkSQLschema="true" sqlMaxLimit="100">
<table name="student" primaryKey="ID" dataNode="dn1"/>
<table name="product" primaryKey="ID" dataNode="dn1,dn2"
rule="auto-sharding-long"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mysql01" />
<dataNode name="dn2" dataHost="localhost2" database="mysql01" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="1" 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>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.42.65.114:3306" user="root"
password="root"/>
</dataHost>
1.要修改的模板
2.运行Mycat(额外开启一个窗口只负责启动Mycat)
3.进入数据库,查看对应表
4.增加数据
5.查看新增数据
rule标签开启级别,0-500W一下在第一分片dn1
可以手动修改分片级别
6.分析第一分片,第二分片
这里不是所谓的DN1就是第一分片,DN2就是第二分片,是根据,谁在前,就是第一分片
7.新增一条500W以后数据
超过500W保存在第二分片
8.新增一条超过千万数据
第二分片最大存储为1000W,找不到其他分片报错
9.查看全部数据
四.以上实战案例初步完成
1.总结实现功能
-
实现非分片表格
-
实现读写分离
-
实现分片表格
2.mycat测试出现的任何问题
1.连接后端数据库失败
后端数据库的mysql.user表格内容不是上面内容,没有把所有root用户的密码改成'root'加密字符串
2.schema.xml中配置writeHost readHost url指定错误
根据错误信息去更改
3.xml配置失败
console控制台启动都会指定到具体内容;
4.重装mycat
将安装文件mycat解压文件夹删除,重新解压.
5.Mycat停止不下来
PS:遇到这个问题,我目前只能重启,没解决,但是简单说一下,
如何避免这个问题的产生,单独开一个窗口,
只负责来开启Mycat,其他功能一律在其他窗口执行,
停止Stop也必须在其他窗口去关闭,
6.Myca 无法启动
当Mycat 正常启动之后,不要操作,
如Ctrl+Z 强制退出等操作,当强行退出,会产生,无法正常关闭,
修改对应配置文件也无法正常重新启动Mycat
暂告一段落