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

MyCat安装与测试教程 超详细!MyCat基础知识1、什么是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、DB二、PostgreSQL等主流数据库,也支持MongoDB这种新型NOSQL方式的存储,将来还会支持更多类型的存储。而在最终用户看来,不管是那种存储方式,在Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操做,这样一来,对前端业务系统来讲,能够大幅度下降开发难度,提高开发速度,在测试阶段,能够将一表定义为任何一种Mycat支持的存储方式,好比MySQL的MyASM表、内存表、或者MongoDB、LeveIDB以及号称是世界上最快的内存数据库MemSQL上。    试想一下,用户表存放在MemSQL上,大量读频率远超过写频率的数据如订单的快照数据存放于InnoDB中,一些日志数据存放于MongoDB中,并且还能把Oracle的表跟MySQL的表作关联查询,你是否有一种不能呼吸的感受?而将来,还能经过Mycat自动将一些计算分析后的数据灌入到Hadoop中,并能用Mycat+Storm/Spark Stream引擎作大规模数据分析。2、关键特性支持SQL92标准支持MySQL、Oracle、DB二、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)还有一些其余特性 这里就不所有举例。3、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安装与测试!!点击查看源网页1、环境准备本机环境是三台centos6.5IP           主机名  数据库名     安装软件192.168.17.4 master  db1        mycat,mysql192.168.17.5 slave1  db2        mysql192.168.17.6 slave2  db3        mysql2、安装mysql一、安装mysql软件linux下安装mysql有两种方式:一种是经过下载源码编译安装,一种是经过rpm包安装,若是配置了yum直接用yum安装会更快编译安装步骤: ./congfigrue –prefix=安装路径 makemake install由于编译安装,后面为了使用方便要将服务注册到init服务中比较麻烦,这里介绍最简单的yum安装二、安装mysql客户端yum -y install mysql三、安装mysql服务器端yum -y install mysql-server yum -y install mysql-devel四、添加mysql用户及权限并配置数据库 三台服务器都安装mysql之后 ,三台机器一样配置数据库具体步骤以下:4.1 配置编码格式vi  /etc/my.cnf添加default-character-set=utf84.2 添加开机启动项chkconfig --add mysqldchkconfig mysqld on4.3 启动mysqlservice mysqld start4.4 配置root用户并设置密码mysqladmin -u root password 1234564.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–pcreate database db1/db2/db3根据不一样机器数据库名不一样4.6 上述操做在三台机器上同样操做3、安装mycat一、安装mycat软件并建立用户下载解压tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz配置环境变量export MYCAT_HOME=/opt/sxt/soft/mycatPATH=$PATH:$MYCAT_HOME/bin经过配置sh /opt/sxt/soft/mycat/bin/mycat start执行开机启动也能够本身写脚本加入init服务建立一个新的groupgroupadd mycat 建立一个新的用户,并加入groupuseradd -g mycat mycat给新用户设置密码,passwd mycat二、配置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了,添加一个便可4、测试mycat一、启动mycat执行mycat starttail -100  $MYCAT_HOME/logs/wrapper.log查看结果以下就代表启动成功了二、测试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链接的库db1db2db3
相关文章
相关标签/搜索