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

mycat 使用


mycat 源码地址前端

mycat 概述

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

数据切分

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

  • 水平切分 按照某个字段的某种规则来分散到多个库之中,每一个表中包含一部分数据。
  • 垂直切分 按照业务将表进行分类,分布到不一样的数据库上面,这样也就将数据或者说压力分担到不一样的库上面。

应用场景

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

不适应场景

参考地址git

  • 非分片字段查询 mycat中的路由结果是经过分片字段分片方法肯定的。
  • 分页排序 为处理有偏移量的排序分页,经过改写SQL解决结果集错误,资源消耗会随偏移量增大而增长。
  • 任意表JOIN 两张表关联数据可能分布在不一样的DB节点上,在单独分片DB中查询得不到正确结果。
  • 分布式事务 Mycat并无根据二阶段提交协议实现XA事务,而是只保证 prepare 阶段数据一致性的弱XA事务

环境搭建

windows下使用

github 参考地址github

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

linux 下使用

暂略sql

三大配置文件

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

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

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

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

    • 主数据库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:朋友推荐的轻量级组件,需集成到程序中,待研究。
相关文章
相关标签/搜索