Mycat分布式数据库架构解决方案--Mycat实现读写分离
echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!
安装完成之后,我们对Mycat的重要配置文件进行了解析,到这里已经对Mycat有了一定的认识,那么我们开始来启动Mycat并连接,做一些简单的配置和使用操作。
Mycat快速入门
- 准备工作:
- 请现在服务器上面安装Mycat,安装教程:https://blog.csdn.net/xlecho/article/details/102755484
- 了解一下他的核心配置文件:Server.xml详解、schema.xml详解、rule.xml详解
- 准备三台服务器,都需要安装mysql
- 搭建一主两从的MySQL读写分离环境:Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
- 下载一份Mycat的原码(在服务器上面编写不方便,本地更改好,替换服务器配置文件更方便)Mycat下载
Mycat配置所可能使用的命令
- 进入mycat安装的bin目录,启动命令:./startup_nowrap.sh
- 进入mycat安装的bin目录,停止命令:./mycat stop
- 查看是否存在运行mycat的进程: ps -ef
- 查看mycat时时运行日志,进入logs目录:more mycat.log
- 配置文件中删除一整行:vi打开配置文件,然后双击d键就会删除光标所在的一行
- 配置文件中删除一整块:点击v,然后移动左右键,光标移动就会选中移动区域,再点击x即可删除
配置Mycat
使用Mycat实现读写分离其实比较简单,只要关注他的两个配置文件schema.xml/server.xml。
- schema.xml主要负责数据库的连接配置
- server.xml主要负责Mycat登录连接配置
schema
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="userDB" checkSQLschema="true" sqlMaxLimit="100">
<table name="user" primaryKey="id" dataNode="dn1" />
</schema>
<dataNode name="dn1" dataHost="host1" database="test" />
<!-- 读写分离 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM" url="192.168.222.132:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.222.133:3306" user="root" password="123456" />
<readHost host="hostS2" url="192.168.222.134:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
server
<?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://io.mycat/">
<!-- Mycat中有两个重要的标签,分别是user、system -->
<!-- system标签与系统配置有关 -->
<system>
<!-- 配置该属性的时候一定要保证mycat的字符集和mysql 的字符集是一致的。
如果需要配置特殊字符集,如:utf8mb4,则可以在index_to_charset.properties中配置,配置格式
为“ID=字符集”,例如:“224=utf8mb4”-->
<property name="charset">utf8</property>
<!-- 1为开启实时统计、0为关闭 -->
<property name="useSqlStat">0</property>
<!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="nonePasswordLogin">0</property>
<property name="useHandshakeV10">1</property>
<!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="useGlobleTableCheck">0</property>
<!-- SQL 执行超时 单位:秒-->
<property name="sqlExecuteTimeout">300</property>
<!-- 指定使用 Mycat 全局序列的类型。 0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式ZK ID 生成器,4 为 zk 递增 id 生成。 -->
<property name="sequnceHandlerType">5</property>
<!-- 必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况 -->
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
<property name="subqueryRelationshipCheck">false</property>
<property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
<!-- 默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
<property name="processorBufferPoolType">0</property>
<!-- 分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
<!-- off heap for merge/order/group/limit 1开启 0关闭 -->
<property name="useOffHeapForMerge">0</property>
<!-- 单位为m -->
<property name="memoryPageSize">64k</property>
<!-- 单位为k -->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!-- 单位为m -->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">false</property>
<!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
</system>
<!-- name="root" 定义登录用户名 -->
<user name="root">
<!-- 定义了登录密码 -->
<property name="password">123456</property>
<property name="schemas">userDB</property>
</user>
</mycat:server>
配置完成之后,我们启动Mycat即可:
进入bin目录
./mycat start
验证是否已经成功实现读写分离
首先我们在主服务器上增加两条数据,由于我们实现mysql主从复制,这个时候增加的两条数据,其他两台从服务器都会同时增加。数据如下:

在主服务器上添加的数据由于MySQL主从复制,所以在每一台服务器上看到的都是一样的数据,但是在从服务器上添加的数据主服务器和另外一台服务器上不会有,我们就利用这个特性添加。
在从服务器192.168.222.134上添加一条数据,如下:

134服务器上就具备了其他服务器不具备的数据,由于我们在schema中配置了写功能服务器132、读133/134两台,所以Mycat读取数据的时候应该是随机读取133/134中的某一台,我们登陆Mycat然后打开user表,多刷新几次就可以看到id为5的那条数据时有时无
登陆Mycat报错,先检查Mycat是否已经成功启动,如果没有启动可以进入mycat文件下logs目录中,打开wrapper.log查看原因

注意:
- 配置登录用户的时候,我们的server要对应上我们schemas中的逻辑库,不然会报错。
- 访问不到Mycat的时候检查端口8066,查看是否开放了端口
做一个有底线的博客主
Mycat分布式数据库架构解决方案--Mycat实现读写分离的更多相关文章
- Mycat分布式数据库架构解决方案--搭建MySQL读写分离环境--一主多从
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 本文主 ...
- Mycat分布式数据库架构解决方案--Mycat实现数据库分表
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 准备工 ...
- Mycat分布式数据库架构解决方案--Mycat的介绍
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 如果我 ...
- Mycat分布式数据库架构解决方案--schema.xml详解
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...
- Mycat分布式数据库架构解决方案--Server.xml详解
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...
- Mycat分布式数据库架构解决方案--rule.xml详解
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...
- Mycat分布式数据库架构解决方案--Linux安装运行Mycat
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Myc ...
- Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文章 ...
- net Core 使用MyCat分布式数据库,实现读写分离
net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题, ...
随机推荐
- IDEA新建一个多maven模块工程(有图)
对于一些大型的项目来说,将项目的各个模块理清并进行管理,便于后续项目的维护,使用maven管理是很方便的,它可以很好的构建模块来设计项目的整体结构,对一些小型的项目不建议使用 1.新建父maven模块 ...
- Linux——基本命令
目录 一.目录切换命令 二.目录操作命令(增删改查) 2.1增加目录 2.2查看目录 2.3寻找目录(搜索) 2.4修改目录名称 2.5移动目录位置(剪切) 2.6拷贝目录 2.7删除目录 三.文件的 ...
- PHP7源码之array_flip函数分析
以下源码基于 PHP 7.3.8 array array_flip ( array $array ) (PHP 4, PHP 5, PHP 7) array_flip - 交换数组中的键和值 arra ...
- redis系列之------字典
前言 字典, 又称符号表(symbol table).关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构. 在字典中 ...
- Spring5源码解析5-ConfigurationClassPostProcessor (上)
接上回,我们讲到了refresh()方法中的invokeBeanFactoryPostProcessors(beanFactory)方法主要在执行BeanFactoryPostProcessor和其子 ...
- Redis 介绍学习
1.Redis 简介 Redis 是一个支持数据结构更多的键值对数据库.它的值不仅可以是字符串等基本数据 类型,也可以是类对象,更可以是 Set.List.计数器等高级的数据结构. Memcached ...
- Java的IO操作之关闭流
我们知道,当结束对一个流的操作时,需要调用流的close()方法对其进行释放,这将释放掉与这个流有关的所有资源,包括文件句柄.端口等.如果不关闭流,垃圾回收机制将无法识别你是否已使用完这个文件,读取的 ...
- Ubuntu安装scrcpy手机投屏和控制(Ubuntu用QQ微信的另一种方法)
Scrcpy 安装 snap install scrcpy adb服务安装 sudo apt-get install android-tools-adb adb配置 查看手机的USB识别号 手机通过U ...
- Windows 服务程序(二)
服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...
- msf之hash攻击
使用hashdump抓取密码(需要系统管理权限) 另外一个更强大的模块 smart_hashdump 如果目标是win7 就需要先绕过UAC 还可以使用msf内置的mimikatz抓取hash msv ...