mycat 使用 (主从 + 读写分离)

mycat 使用


mycat 源码地址

mycat 概述

是一个开源的分布式数据库系统,一个实现了 MySQL 协议的的 Server。前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命令行访问,而其后端可以用 MySQL 原生(Native)协议与多个 MySQL服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信。其核心功能是 分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

数据切分

指通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

  • 水平切分

    按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。

  • 垂直切分

    按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。

应用场景

  • 单纯的读写分离,此时配置最为简单
  • 分表分库
  • 多租户应用,每个应用一个库,但应用程序只连接mycat,从而不改造程序本身,实现多租户化
  • 报表系统,借助于mycat的分表能力,处理大规模报表的统计
  • 替代hbase,分析大数据
  • 作为海量数据实时查询的一种简单有效方案

不适应场景

参考地址

  • 非分片字段查询

    mycat中的路由结果是通过分片字段分片方法确定的。

  • 分页排序

    为处理有偏移量的排序分页,通过改写SQL解决结果集错误,资源消耗会随偏移量增大而增加。

  • 任意表JOIN

    两张表关联数据可能分布在不同的DB节点上,在单独分片DB中查询得不到正确结果。

  • 分布式事务

    Mycat并没有根据二阶段提交协议实现XA事务,而是只保证 prepare 阶段数据一致性的弱XA事务

环境搭建

windows下使用

github 参考地址

  1. 下载地址,选择合适版本下载。
  2. 直接运行 startup_nowrap.bat

linux 下使用

暂略

三大配置文件

在安装目录中conf文件夹下存放。

  1. server.xml:是mycat服务器参数调整和用户授权的配置文件。
  2. schema.xml:管理着 MyCat 的逻辑库(schema)、表、分片规则、DataNode 以及 DataSource
  3. rule.xml:是分片规则的配置文件。分片规则的具体参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启mycat。

mycat 高可用与集群(主从 + 读写分离)

  1. mysql节点开启主从复制的配置方案

    • 主数据库master修改

      • 修改my.ini(mysql配置文件)后,重启mysql。(mysql安装目录中没有,如果是windows系统则可能在C盘隐藏目录ProgramData下)
      [mysqld]
      log-bin=mysql-bin # 开启二进制日志
      server-id=1 # 设置server-id
      
      # 默认记录所有库操作
      # 不同步哪些数据库
      binlog-ignore-db = mysql
      binlog-ignore-db = test
      binlog-ignore-db = information_schema  
      
      # 只同步哪些数据库,除此之外,其他不同步
      binlog-do-db = game
      • 创建授权用户
      CREATE USER ‘用户名‘@‘从数据库Ip‘ IDENTIFIED BY ‘密码‘; # 创建用户
      GRANT REPLICATION SLAVE ON *.* TO ‘用户名‘@‘从数据库IP‘; # 分配权限
      flush privileges;   # 刷新权限
      • 查看master状态,记录二进制文件名和位置
      SHOW MASTER STATUS;
    • 从数据库slave修改
      • 修改my.ini(mysql配置文件)后,重启mysql。
      [mysqld]
      server-id=2 #设置server-id,必须唯一
      • 执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
      CHANGE MASTER TO
      MASTER_HOST=‘主数据库IP‘,
      MASTER_USER=‘用户名‘,
      MASTER_PASSWORD=‘密码‘,
      MASTER_LOG_FILE=‘mysql-bin.000003‘, -- 由上,查看master状态得到
      MASTER_LOG_POS=73; -- 由上,查看master状态得到
      • 启动slave同步进程
      start slave; # 开启
      stop slave;  # 关闭
      • 查看slave状态
      show slave status\G;

      Slave_IO_RunningSlave_SQL_Running都为YES时表示主从同步设置成功。

  2. 修改mycat配置文件schema.xml,配置逻辑库

    • 主节点配置为mycat的dataHost里的writeNode
    • 从节点配置为mycat的dataHost里的readNode
    <mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 逻辑库配置 -->
    <schema name="DB1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
    <!-- 节点配置 -->
    <dataNode name="dn1" dataHost="host01" database="testdb" />
    <!-- 数据库实例:读写分离的配置 -->
    <dataHost name="host01" maxCon="1000" minCon="10" balance="1"
          writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <!-- 主库 master 配置,可多个-->
        <writeHost host="hostM1" url="192.168.20.113:3306" user="test" password="!QAZ2wsx">
            <!-- 从库 slave 配置,可多个 -->
            <readHost host="hostS1" url="192.168.20.107:3306" user="test" password="!QAZ2wsx" />
        </writeHost>
        <!--主故障,顶替写节点,主正常是分担读压力-->
        <!--
            <writeHost host="hostS2" url="" user="root" password="" > </writeHost>
        -->
    </dataHost>
    </mycat:schema>
  3. 修改mycat配置文件server.xml,添加 mycat 用户
    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">DB1</property>
    </user>
    
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">DB1</property>
        <property name="readOnly">true</property>
    </user>
  4. 使用完全与mysql相同。(PS:注意mycat默认端口号是8066

相关问题

  • 连接时报错 ERROR 1129 (00000): #HY000Host ‘192.168.31.242’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

    原因是同一个ip在短时间内产生太多中断的数据库连接而导致阻塞。在mysql终端执行 mysqladmin -u root -p flush-hosts清除缓存后可进行连接。(导致原因需自行查找解决)

  • 报错 ... connect error MySQLConnection ... Unknown charsetIndex:255

    修改mycat字符集配置文件index_to_charset.properties,添加255=utf8mb4,重启服务。

  • 报错 ... Access denied for user ...

    检查用户权限;检查 dataNode 上配置实体库(database 值)是否存在;

其它轻量级组件

  • sharding-jdbc:朋友推荐的轻量级组件,需集成到程序中,待研究。

原文地址:https://www.cnblogs.com/wscy/p/9991336.html

时间: 2024-10-27 05:48:47

mycat 使用 (主从 + 读写分离)的相关文章

jeesz分布式架构之 mycat实现mysql读写分离实践

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] mycat是一个的数据库中间件,基于阿里开源的cobar产品而研发,由几个有志之士的牛人共同完成并开源.提供高可用性数据分片集群,自动故障切换,高可用性 ,支持读写分离,支持MySQL双主多从,以及一主多从的模式 ,支持全局表,数据自动分片到多个节点,用于高效表关联查询 ,支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询多平台支持,部署和实施简单. 今天来实践下用mycat实现mysql的读写分离,1.配置mys

mycat实现MySQL读写分离

mycat实现MySQL读写分离 mycat是什么 Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统.Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务.对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储. Mycat的几个典型的应用场景: 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换: 分表分库,对于超过

基于 EntityFramework 的数据库主从读写分离服务插件

基于 EntityFramework 的数据库主从读写分离服务插件 1.       版本信息和源码 1.1 版本信息 v1.0 beta(2015-04-02),基于 EF 6.1 开发,支持 EF 6.1 之后的所有 EF6 版本. 1.2 开放源码地址 https://github.com/cjw0511/NDF.Infrastructure 关于该 EF 数据库主从读写分离服务核心源码位于文件夹: src\ NDF.Data.EntityFramework\MasterSlaves 文件

Amoeba实现mysql主从读写分离

架设amoeba,实现mysql主从读写分 安装amoeba前需要先安装jdk,因为amoeba是JAVA编写的,所以需要JDK环境的支持,至于版本需要在JAVA1.5以后,mysql数据库需要在4.1以后的版本. 以下是我的实验环境. System:    CentOS 6.5 Master mysql:192.168.88.133 Slave mysql:192.168.88.135 Amoeba server:   192.168.88.131 安装mysql及配置mysql主从这里省略,

CRL快速开发框架4.4版发布,支持主从读写分离

经过一些调整和优化,4.3已经运行在生产环境,对于不久将会遇到的查询性能,读写分离需求列上日程 读写分离需求 对于一个数据库作了主从发布/订阅,主库为DB1,从库为DB2 所有写入通过DB1,所有查询通过DB2,当然也可以通过DB1 CRL内部实现 在CRL内部调用,请求读和请求写的方法会标记为Read或Write,然后再通过标记实现不同的数据库连接访问对象 如以下代码 1 /// <summary> 2 /// 返回动态对象的查询 3 /// </summary> 4 /// &

基于 EntityFramework 的数据库主从读写分离架构 - 目录

基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\MasterSlaves 基于 EntityFramework 的数据库主从读写分离架构 - 需求/功能概述 基于 EntityFramework 的数据库主从读写分离架构(1)- 原理概述和基本功能实现 基于 EntityFramework 的

Mycat实现Mysql主从读写分离

一.概述 关于Mycat的原理网上有很多,这里不再详述,对于我来说Mycat的功能主要有如下几种: 1.Mysql主从的读写分离 2.Mysql大表分片 3.其他数据库例如Oracle,MSSQL,DB2等的读写分离和分片. 之所以第3点单独列出来只是因为它不常用,而且使用的JDBC,连接Mysql则是直接使用Mysql协议. 对于Mycat的分片功能,由于遇到了几个很严重的BUG,同时分片带来的一系列并发问题比较繁杂,因此测试之后放弃了,这里只讨论读写分离. 二.安装配置 1.安装JDK(要求

基于Mycat的MySQL主从读写分离配置详解与示例

1.mycat二进制包安装 tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gzcd mycatmv mycat /opt/ useradd mycatchown -R mycat:mycat mycat 2.mysql操作搭建主库环境省略...... 创建数据库CREATE DATABASE `integration01` DEFAULT CHARACTER SET utf8 ; 创建物理表 CREATE TABLE

Mycat实现数据库读写分离

什么是读写分离 在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能.当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作. 读写分离的好处 1)分摊服务器压力,提高机器的系统处理效率 读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解