一、概述

关于Mycat的原理网上有很多,这里不再详述,对于我来说Mycat的功能主要有如下几种:

1.Mysql主从的读写分离

2.Mysql大表分片

3.其他数据库例如Oracle,MSSQL,DB2等的读写分离和分片。

之所以第3点单独列出来只是因为它不常用,而且使用的JDBC,连接Mysql则是直接使用Mysql协议。

对于Mycat的分片功能,由于遇到了几个很严重的BUG,同时分片带来的一系列并发问题比较繁杂,因此测试之后放弃了,这里只讨论读写分离。

二、安装配置

1.安装JDK(要求至少JDK1.7以上)

tar -zxvf jdk-7u80-linux-x64.tar.gz
mv jdk1.7.0_80 /usr/local
vi /etc/profile
添加:
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
之后source /etc/profile生效,并用java -version检查新的jdk版本。

2.安装Mycat

#useradd mycat
#passwd mycat --设置密码 #tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#mv mycat/ /usr/local/ #chown -R mycat.mycat /usr/local/mycat/ #vi /usr/local/mycat/conf/wrapper.conf
wrapper.java.command=%JAVA_HOME%/bin/java

3.文件说明

如上我们将mycat安装到了/usr/local/mycat目录下,我们需要关注的只有2个文件夹conf和logs文件夹:

1)logs文件下只需要关注wrapper.log,这是mycat的日志

2)conf文件下只需要关注server.xml和schema.xml,其他的大多是分片相关的,本文不讨论。

三、读写分离配置

1)当前环境说明:

Mysql 主:mysql01 192.168.20.68

从:mysql02 192.168.20.69

Mycat安装在192.168.20.68上,我们的目的是实现一个名叫leo的库(也叫schema)的读写分离。

2)server.xml配置

关于Mycat性能调优的大多数参数都在此文件中,我们暂不关心,配置读写分离此文件只需要改动如下部分:

我们设置了mycat的用户名和密码是root和123456,此账号密码就是外部程序连接用的可以随意设置,下边的user/user只读用户是默认的可以删掉,不删的话修改下schema即可。

3)schema.xml

此文件就是用于具体配置读写分离的配置文件,废话不多说直接贴出具体的配置文件截图,其他地方无需修改。

图中设置了1个逻辑节点node1,这个node1对应逻辑主机host1,host1配置了writehost=mysql01,readhost=mysql02,真实的数据库连接账号密码leo/leo也是在这里才出现的。

在如上的xml文件中我们只需要关注4个标签,schema/table/dataNode/dataHost, writehost是dataHost的子标签,readhost是writehost的子标签。

其中schema定义了要读写分离的库,最好是真实库名。table定义了表信息,只有分片才用到因此这里直接全部注释。

dataNode定义了逻辑主机dataHost和库名,这里库名必须是真实的。dataHost定义了逻辑主机对应的物理主机,可以有多个写主机,每个写host可以对应多个读host。

writehost和readhost则包含具体的数据库连接信息。

dbDriver表示使用mysql协议,其他数据库选择JDBC。至于其他参数这里不做详细解释,网上很多。

需要注意的这里只有url部分和账号密码部分包含真正的DB连接信息,其他的诸如dbnode,dbhost,database,host等属性全部是虚拟的,只是为了便于识别才写成真实的主机名和库。

4)读写分离测试

启动mycat:/usr/local/mycat/bin/mycat start

连接mycat:mysql -uroot -p123456 -P8066 -h127.0.0.1

Mycat自动连到的是从库,但是有DML操作就会转发到主库,此账户的权限等同于你在writehost和readhost中配置的账户权限。

Mycat实现Mysql主从读写分离的更多相关文章

  1. mycat配置MySQL主从读写分离

    1.安装java 1.8 mycat 1.6要求的Java需要Java 1.8或1.8以上,安装Java参考以下链接: https://blog.csdn.net/weixin_43893397/ar ...

  2. MyCAT实现MySQL的读写分离

    在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修 ...

  3. 通过mycat实现mysql的读写分离

    mysql的主从配置沿用上一篇博客的配置:https://www.cnblogs.com/MasterSword/p/9434169.html mycat下载地址:http://www.mycat.i ...

  4. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  5. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  6. 基于Amoba实现mysql主从读写分离

    一.Amoeba简介           Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特 ...

  7. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  8. Mycat实现mysql主从复制(读写分离)

    数据库性能瓶颈主要原因: 随着用户数的增多,带来的是数据库连接的大幅度增长 随着业务体量的增长,表数据量(空间存储的问题)的大幅增长,其中涉及到索引的优化,mysql默认的索引是硬盘级别的,BTREE ...

  9. mysql主从读写分离,分库分表

    1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...

随机推荐

  1. 支付宝客户端架构解析:Android 容器化框架初探

    摘要: 本文将介绍支付宝 Android 容器化框架设计的基本思路. 1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”.“网络优化”.“性能启动优化 ...

  2. Python数值类型

    数值类型 python的数值类型包括常规的类型:整数(没有小数部分的数字).浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数.分数.有理数.无理数.集合.进制数等).除了十进制整数,还有 ...

  3. linux 常用命令集合-命令导图

    这几天画了几张导图,自己熟悉命令,并记录总结一下,还有很多没写上去,在慢慢完善把. 1.帮助命令 2.文件搜索命令 3.用户管理 4.权限管理 5.文件处理类 6.压缩解压 7.网络配置类 8.关机重 ...

  4. python模块之pickle、shelve、json

    一 什么是序列化 序列化指的是将内存中的数据结构转化为一种中间格式,并存储到硬盘上. (反序列化:将硬盘上存储的中间格式数据再还原为内存中的数据结构) 二 为什么要序列化 持久保持状态 需知一个软件/ ...

  5. Android Studio 使用Intent

    1.显式Intent Intent intent=new Intent(yzj.this,MainActivity.class);//当前活动的实例,要去的实例 startActivity(inten ...

  6. [android] 采用layoutInflater打气筒创建一个view对象

    上一节知道了ListView的工作原理,数据也展示出来了,但是TextView显示的非常难看,如果想美化一下,就先创建好一个布局出来,这个布局采用了两层LinearLayout嵌套,外层的水平方向,内 ...

  7. mybatis_02简单操作数据库

    模糊查询用户信息 <!-- [${}]:表示拼接SQL字符串 [${value}]:表示要拼接的是简单类型参数. 注意: 1.如果参数为简单类型时,${}里面的参数名称必须为value 2.${ ...

  8. springboot使用hibernate validator校验,Bean Validation校验

    第一个地址:springboot使用hibernate validator校验,Bean Validation校验

  9. http协议、web服务器、并发服务器(下)

    Web静态服务器-5-非堵塞模式 单进程非堵塞模型 import socket import time def main(): tcp_socket_server = socket.socket(so ...

  10. oracle的Date类型遇到MyBatis产生的坑

    坑描述: 公司的订单表数据量巨大(亿级),在进行查询的时候,发现一个慢查询. 背景: 数据库:oracle 表:T_order 索引字段:create_date  (字段类型 date) 慢查询sql ...