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中增加序号数据库配置,配置代码为:

  

  

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

        select user();

         

       

   

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

LOCALSERIAL=seqDn

...

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

使用序列方式: 1304762593797345280(XXX为sequence表中的序列名)。

你可能感兴趣的:(mycat,mycat)