天天看点

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

目录

一:Mycat说明

二:Mycat的安装

1.安装(版本需要匹配Jdk)

2.配置管理(版本1.6.7)

三:Mycat实现读写分离

1.建立一个读库一个写库,其中fk库字段一致,并2个表中fk_user数据不一致

2. 修改二 2 (第二步)中的配置文件

3.Mycat链接测试 

四:热切换

1、建立一个备份数据库

2、配置

3.测试 

4.问题以及解决方案

一:Mycat说明

  说实话,一开始还是比较拒绝Mycat的,因为刚开始看到Mycat配置直接蒙蔽了。然后转而学习了Mysql-proxy,学完了Mysql-proxy的读写分离之后,想学习Mysql-proxy分库分表的管理,结果翻阅大量的资料,没有一个说可以直接支持的,所以没办法只能将其剔除在数据库篇,但是如果项目之中只要求做读写分布,又不能耦合代码,那么强烈建议学习Mysql-proxy,请移步我的另一篇博客吧从零开始java数据库篇(番外):主从复制,复制一致性(msyql-proxy);

  好了,废话不多说了,基于对比过Mysql-proxy,我们首先看一下Mycat能做哪些事情吧?

 最简单就是读写分离和分库分表。

二:Mycat的安装

1.安装(版本需要匹配Jdk)

       wins:下载压缩包,解压,安装,提前配置好jdk环境,在conf/wrapper.onf声明到jdk的bin目录:

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

        ubuntu:下载tar,解压,提前安装好jdk环境

2.配置管理(版本1.6.7)

 Mycat的映射Mysql流程

(1)Mycat创建一个用户,一个虚拟库

(2)Mysql创建一个用户,一个库

(3)Mycat将Mysql库中的表一一映射到虚拟表中

第一步:在/conf/server.xml中添加一个虚拟用户和一个虚拟库

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

第二步,在Mysql库中创建一个proxy用户并授予权限,同时创建一个实体表

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

第三步,在/conf/schema.xml进行映射到具体的Mysql

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

第四步,在/conf/schema.xml映射实体库到虚拟库中(我一下子映射了3歌库)

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

第五步,在/conf/schema.xml映射实体表到虚拟库中

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

第六步,测试

用可视化工具连接,Mycat的ip:8066以及配置的虚拟用户连接(9066是管理端口)

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

这里有一个奇怪的问题,但是select 查询可以如下:解决方案:

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换
从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

解决方案,第五步的配置文件(一定是true)

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

三:Mycat实现读写分离

1.建立一个读库一个写库,其中fk库字段一致,并2个表中fk_user数据不一致

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换
从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换
从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

2. 修改二 2 (第二步)中的配置文件

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

3.Mycat链接测试 

(1)以Mycat链接

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

(2)先查询一下

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

由上面的可知,读库的确只有2条数据。

(3)插入一下

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

这是去写库里看一下

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

再去写库看一下

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

致辞Mycat的读写分离就完成了 

四:热切换

当主数据挂了,能够及时的切换到备份数据库。

1、建立一个备份数据库

  为了区别,建立一个一样的备份数据库,结构一样,但是所有的用户数据为空。

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

2、配置

  重复二,2,第三步

从零开始java数据库篇(七):Mycat读写分离一:Mycat说明二:Mycat的安装三:Mycat实现读写分离四:热切换

3.测试 

 依次挂掉不同的数据源,都是可以切换的。

4.问题以及解决方案

 (1) 在进行热切时,2个数据源一定要互为主从,互可复制,一方数据不一致

 (2)热切时,即使主库及时恢复,这时Mycat并不会主动切换到主库,后来问了相关的运维人员,解释是这样的:安装了mycat,那么数据库对于你应用层就是透明的,你相当于单库单表的形式访问,完全没必要关心谁是切库。

继续阅读