Mycat安装与配置

关键特性

  • 支持SQL92标准
  • 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
  • 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
  • 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
  • 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  • 基于Nio实现,有效管理线程,解决高并发问题。
  • 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
  • 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
  • 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
  • 支持多租户方案。
  • 支持分布式事务(弱xa)。
  • 支持XA分布式事务(1.6.5)。
  • 支持全局序列号,解决分布式下的主键生成问题。
  • 分片规则丰富,插件化开发,易于扩展。
  • 强大的web,命令行监控。
  • 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 支持密码加密
  • 支持服务降级
  • 支持IP白名单
  • 支持SQL黑名单、sql注入攻击拦截
  • 支持prepare预编译指令(1.6)
  • 支持非堆内存(Direct Memory)聚合计算(1.6)
  • 支持PostgreSQL的native协议(1.6)
  • 支持mysql和oracle存储过程,out参数、多结果集返回(1.6)
  • 支持zookeeper协调主从切换、zk序列、配置zk化(1.6)
  • 支持库内分表(1.6)
  • 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

什么是MYCAT

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

一、安装

  1. 上传Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz包至服务器/mycat/目录下。(下载链接:http://dl.mycat.io/1.6-RELEASE/
  2. 解压Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz包得到mycat目录;

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

二、配置

(1)替换server.xml,schema.xml,rule.xml

server.xml:为mycat服务配置,主要为配置mycat的连接数据库用户名、密码、端口等相关信息;

schema.xml:主要配置分库分表相关节点信息;

rule.xml:主要配置是分库字段规则。

(2)启动

进入/mycat/mycat/bin文件夹中

./mycat start #启动

./mycat stop #停止

./mycat restart #重新启动

开放3310(连接)与3311(管理端)端口

/sbin/iptables -I INPUT -p tcp --dport 3310  -j ACCEPT

/sbin/iptables -I INPUT -p tcp --dport 3311  -j ACCEPT

(3)设置环境变量,供后续维护方便。

在/etc/profile增加相应内容

vim  /etc/profile

export MYCAT_HOME=/mycat/mycat/

export PATH=$PATH:$MYCAT_HOME/bin  

编辑后source  /etc/profile生效。

  1. 客户端连接:

mysql -uXXX-h192.168.XXX.XXX -pXXXXXX-P3310

(4)验证:本地使用客户端能正常连接到Mycat。

  • 全局序列号

Mycat提供多种方式:本地文件方式、数据库方式、本地时间戳方式等;根据目前现有的业务逻辑与改动量,决定使用数据库方式。主要操作流程:

  1. 新建一个数据库节点名称为:sequencedb,用于专门管理序列。在该库中创建表:sequence。创建三个函数( 获取当前 sequence 的值、设置 sequence 值、获取下一个 sequence 值),函数创建脚本为:

DROP FUNCTION IF EXISTS mycat_seq_currval;

CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64)

BEGIN

   DECLARE  retval  VARCHAR(64);

   SET  retval ='-999999999,null';

   SELECT concat(CAST(current_value AS CHAR),',',CAST(increment AS CHAR)) INTO  retval 

   FROM sequence

   WHERE name = seq_name;

   RETURN  retval ;

END;

DROP FUNCTION IF EXISTS mycat_seq_setval;

CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64)

BEGIN

   UPDATE sequence

   SET current_value = value

   WHERE name = seq_name;

   RETURN mycat_seq_currval(seq_name);

END;

DROP FUNCTION IF EXISTS mycat_seq_nextval;

CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) RETURNS varchar(64)

BEGIN

   UPDATE sequence

   SET current_value = current_value + increment

   WHERE name = seq_name;

   RETURN mycat_seq_currval(seq_name);

END

  1. 在mycat中的conf下的schema.xml中增加序号数据库配置,配置代码为:

<!--sequence-->

   <dataNode name="seqDn" dataHost="localhostSeq" database="sequencedb" />

   <dataHost name="localhostSeq" maxCon="1000" minCon="10" balance="0"

                           writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

        <heartbeat>select user();</heartbeat>

        <writeHost host="hostM1" url="192.168.XX.XX:3306" user="XXX" password="XXXX"> 

        </writeHost>

    </dataHost>

  1. 在mycat中的conf下的sequence_db_conf.properties增加配置,配置为:

LOCALSERIAL=seqDn

...

注:配置文件中的序列名建议为大写。

使用序列方式:next value for MYCATSEQ_XXX(XXX为sequence表中的序列名)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhouhaitao_cherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值