利用mycat管理mysql的集群的管理

Mycat是什么:

    Mycat是一个 数据库的中间件,支持 SQL92标准

    支持MySQL、Oracle、DB2、SQLServer、PostgreSQL等DB的常见SQL语法

    遵守 Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。

    基于心跳的自动故障切换,支持读写分离,支持 MYSQL主从,以及集群操作。


首先在github上下载Mycat-Server的源代码:

https://github.com/MyCATApache/Mycat-Server

找到 项目当中的 MycatStartup.java  这个文件是一个入口文件,等下会用到。


-----------------------------------------------------------------------------------------------------------------------------

接下来演示mycat对mysql中的一张表进行垂直分表(单数据库大表拆分)的操作,即将一张表映射到mysql当中的三张表上


首先在某台服务器的mysql当中建立一张表如下图:

表名:  company1

利用mycat管理mysql的集群的管理_第1张图片

然后把company1这张表复制2份

表名: company2

表名: company3

利用mycat管理mysql的集群的管理_第2张图片

在navicat当中是这样的:

利用mycat管理mysql的集群的管理_第3张图片


然后回到  Mycat-Server这个项目中进行对应的配置:

看到  server.xml文件中的

利用mycat管理mysql的集群的管理_第4张图片

记下这里的 password和schemas,等下使用  navicat连接


然后过来配置  schema.xml文件:

替换成下面的配置:






	
	
		

	

		select user()
		
		
		

	

	
 
  

然后把 MyCat-Server.java中的 MyCatStartUp.java这个文件运行一下

运行,在navicat控制端连接mycat

利用mycat管理mysql的集群的管理_第5张图片


连接之后发现 TESTDB这个模拟库和  company 这个mycat中的模拟表

利用mycat管理mysql的集群的管理_第6张图片

然后点击Mycat-Server中的查询-->新建查询,然后在控制台执行下面的语句:

INSERT INTO `company2` VALUES ('1', '华为');
INSERT INTO `company3` VALUES ('2', '中兴');
INSERT INTO `company1` VALUES ('3', 'OPPO');
INSERT INTO `company2` VALUES ('4', '百度');
INSERT INTO `company3` VALUES ('5', '小米');

INSERT INTO `company1` VALUES ('6', '阿里');

然后看实际数据库表中的数据,已经被mycat分流到不同的 company1、company2、company3表当中了如下图:

company1:


company2:


company3:



然后继续在控制台执行下面的语句:

explain select * from company;


可以看到下面的信息:

利用mycat管理mysql的集群的管理_第7张图片

发现sql解释执行计划会遍历所有的表


-----------------------------------------------------------------------------------------------------------------------------

接下来演示下跨数据库分表的问题:

在schema.xml文件当中进行下面的配置:





	
	

		
select user()

然后再192.168.159.136这台服务器上面建立三个 数据库 分别为  db1、db2、db3


利用mycat管理mysql的集群的管理_第8张图片


配置完成后运行 MycatStartup.java 这个文件:

然后再在  Mycay-server.java  当中发起一个查询:

利用mycat管理mysql的集群的管理_第9张图片

输入下面的建表语句

CREATE TABLE `record` (
  `id` varchar(32) DEFAULT NULL,
  `record_name` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后会发现在 管理配置的192.168.159.136这台服务器上出现了 schema.xml当中配置的record这张表,并且分配给了不同的三个数据库  db1、db2、db3

利用mycat管理mysql的集群的管理_第10张图片

再次在Mycat-Server这个虚拟库下新建一个查询

利用mycat管理mysql的集群的管理_第11张图片

insert into record(id,record_name)value(1,"hahaha");
insert into record(id,record_name)value(2,"hehehe");

insert into record(id,record_name)value(3,"gagaga");

然后可以再其他三个库当中看到record记录被分片路由,最后存储到三个不同的库,如下图所示:

db1中:


db2中:


db3中:



-----------------------------------------------------------------------------------------------------------------------------

接下来演示下mycat当中的读写分离:





	

	


	
	


	

		show slave status

		
			
		

		

	




-----------------------------------------------------------------------------------------------------------------------------



你可能感兴趣的:(利用mycat管理mysql的集群的管理)