MyCat安装与测试教程 超详细!

MyCat安装与测试教程 超详细!



MyCat基础知识



一、什么是MYCAT?



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



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



Mycat发展到目前版本,已经不在是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NOSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅度降低开发难度,提升开发速度,在测试阶段,可以将一表定义为任何一种Mycat支持的存储方式,比如MySQL的MyASM表、内存表、或者MongoDB、LeveIDB以及号称是世界上最快的内存数据库MemSQL上。

试想一下,用户表存放在MemSQL上,大量读频率远超过写频率的数据如订单的快照数据存放于InnoDB中,一些日志数据存放于MongoDB中,而且还能把Oracle的表跟MySQL的表做关联查询,你是否有一种不能呼吸的感觉?而未来,还能通过Mycat自动将一些计算分析后的数据灌入到Hadoop中,并能用Mycat+Storm/Spark Stream引擎做大规模数据分析。



二、关键特性



支持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,命令行监控。

支持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)

还有一些其他特性 这里就不全部举例。



三、MyCat优势


MyCat基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。



业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技s术团队保证了MYCAT的产品质量。



MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。






看到这里 想必你已经有对Mycat产生了浓厚的兴趣 上面讲了了一堆概念的东西 是不是已经手痒痒了? 但是在学习MyCat之前 你一定要精通mysql 如果你对自己没信心 博主为大家准备了 MySql高级视频教程



链接:https://pan.baidu.com/s/1pNkhKld 密码:jo79




干货准备!! MyCat安装与测试!!



点击查看源网页



一、环境准备




本机环境是三台centos6.5




IP 主机名 数据库名 安装软件

192.168.17.4 master db1 mycat,mysql

192.168.17.5 slave1 db2 mysql

192.168.17.6 slave2 db3 mysql




二、安装mysql



1、安装mysql软件



linux下安装mysql有两种方式:一种是通过下载源码编译安装,一种是通过rpm包安装,如果配置了yum直接用yum安装会更快



编译安装步骤:



./congfigrue –prefix=安装路径

make

make install



因为编译安装,后面为了使用方便要将服务注册到init服务中比较麻烦,这里介绍最简单的yum安装



2、安装mysql客户端


yum -y install mysql






3、安装mysql服务器端



yum -y install mysql-server
yum -y install mysql-devel







4、添加mysql用户及权限并配置数据库



三台服务器都安装mysql以后 ,三台机器同样配置数据库

具体步骤如下:



4.1 配置编码格式



vi /etc/my.cnf



添加



default-character-set=utf8









4.2 添加开机启动项



chkconfig --add mysqld
chkconfig mysqld on









4.3 启动mysql





service mysqld start







4.4 配置root用户并设置密码




mysqladmin -u root password 123456







4.5 创建新用户



首先用root用户登录




mysql -uroot –p



然后输入密码







执行use mysql,进入用户管理库,执行



select user,host from user;



查询当前用户发现有一些user是空的用户,直接删掉,



delete from user where user=''



否则后面会出问题











这里能看到只能本机访问root,可以通过执行语句




update user set host = '%' where user = 'root' andhost='localhost';



来释放root的访问权限,让所有ip都能通过root登录







执行语句




insert into mysql.user(Host,User,Password) values
("%","mycat",password("123456"));



添加新用户







然后是赋权限,我这里是赋了所有权限,可以只赋某个库,或者部分权限,命令自己网上查,执行赋权限语句




grant all privileges on *.* to 'mycat'@'%' identified by '123456';



后一定记得执行




flush privileges;



来刷新权限







登录新建的用户并创建响应的数据库,




mysql –umycat–p




create database db1/db2/db3



根据不同机器数据库名不同







4.6 上述操作在三台机器上一样操作



三、安装mycat



1、安装mycat软件并创建用户



下载解压



tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz



配置环境变量



export MYCAT_HOME=/opt/sxt/soft/mycat
PATH=$PATH:$MYCAT_HOME/bin







通过配置



sh /opt/sxt/soft/mycat/bin/mycat start



执行开机启动也可以自己写脚本加入init服务







创建一个新的group



groupadd mycat



创建一个新的用户,并加入group



useradd -g mycat mycat



给新用户设置密码,



passwd mycat



2、配置mycat配置文件



在三台mysql的配置文件

vi /etc/my.cnf


中加入


lower_case_table_names = 1


来忽略大小写






编辑schema文件

先备份一下cp





$MYCAT_HOME/conf/schema.xml
$MYCAT_HOME/conf/schema.xml.tmp
vim $MYCAT_HOME/conf/schema.xml



将里面mycat:schema节点的东西全部干掉,如下配置


<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"
rule="sharding-by-intfile" />
</schema>
<!--数据节点dn1,对应的主机c1,对应是数据库db1 -->
<dataNode name="dn1" dataHost="master" database="db1" />
<dataNode name="dn2" dataHost="slave1" database="db2" />
<dataNode name="dn3" dataHost="slave2" database="db3" />
<!-- 主机C1-->
<dataHost name="master" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!--mysql数据库的连接串 -->
<writeHost host="hostM1" url="master:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>
<!-- 主机C2-->
<dataHost name="slave1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="slave1:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>
<!-- 主机C3-->
<dataHost name="slave2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!--mysql数据库的连接串 -->
<writeHost host="hostM3" url="slave2:3306" user="mycat"
password="123456">
</writeHost>
</dataHost>







在conf目录下配置server.xml ,将目录下没有的用户全部删掉
或者注释掉,添加可用的用户,这里添加了



<user name="mycat">
<property name="password">123456</property>
<property name="schemas">JamesMycatSchema</property>
</user>







修改conf下的partition-hash-int.txt文件
在下面添加10020=2,原本默认的是分两个就是10000和10010,
现在我们三个就要三个分类id了,添加一个即可







四、测试mycat



1、启动mycat




执行



mycat start










tail -100 $MYCAT_HOME/logs/wrapper.log



查看结果如下就表明启动成功了









2、测试mysql表横向分割

在虚拟机外的windows安装Navicatfor MySQL,分别连接到三个mysql数据库,执行建表语句




create table employee (
id int not null primarykey,
name varchar(100),
sharding_id int not null
);



用Navicatfor MySQL连接mycat,mycat默认端口是8066,配置如图:









因为刚才执行了建表语句,这时候连接上了mycat里面也有一个空的employee表



执行如下语句



insert into employee(id,name,sharding_id) values(1, 'I am db1',10000);
insert into employee(id,name,sharding_id) values(2, 'I am db2',10010);
insert into employee(id,name,sharding_id) values(3, 'I am db3',10020);
insert into employee(id,name,sharding_id) values(4, 'I am db1',10000);
insert into employee(id,name,sharding_id) values(5, 'I am db2',10010);
insert into employee(id,name,sharding_id) values(6, 'I am db3',10020);








刷新一下navicat查看mycat连接的库









db1








db2









db3








原文地址:https://www.cnblogs.com/jiangwenhui/p/10154107.html