mycat数据库中间件之--环境安装及demo示例(二)

缺乏、安全感 2021-11-23 01:34 274阅读 0赞

关于Mycat,它是一个阿里的开源项目,用来解决分库分表的海量数据存储和查询优化,关于它的简介,可以直接参考介绍:Mycat的上一篇博文。

下面对自己的demo做个记录:

  1. 之前从192.168.68.3克隆了一台服务器192.168.68.6(关于克隆可以看我前面的文章),在192.168.68.6上面安装了mysql(mysql安装可以参考我前面的文章)

在192.168.68.3中可以没有mysql(实际中已经安装好了mysql的读写分离,我怕用这个当作mysql会对68.4/68.5机器上的数据造成影响),下面会提到这台机器需要jdk,然后用这台机器来安装mycat,控制其它机器的mysql进行读写操作。

1.准备工作

Mycat是用java写的,所以运行环境需要jdk的支持。我之前没有装,所以把安装步骤说一下:

可以先试下自己有没有装java环境,我输入java提示没有该命令

1)linux版jdk下载:http://www.oracle.com/technetwork/java/archive-139210.html

由于我的虚拟机是64位centos6.5,我下的是1.7.0_80的解压版的

70

下载之后,我还是放在了/software文件夹下

学会用rz来传文件,直接yum install -y lrzsz安装上传文件工具,安装好之后,进入到要上传的路径下,直接rz命令,就可以将本地的文件上传到该路径下。

2)解压

我把他解压到了/user/local路径下 tar -zxvf jdkxxxxx -C /user/local

3)配置环境变量

解压后,jdk的bin目录所在的路径是/usr/local/jdk1.7.0_80

所以在/etc/profile

export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
然后source一下,source /etc/profile使配置文件生效

这样再java就有该命令了

2.下载Mycat

官方下载地址:http://dl.mycat.io/

我下的是1.6的解压版

70 1

3.解压mycat

同样使用rz工具将它上传到/software文件夹下 并解压到/user/local路径下(解压后的文件名就叫做mycat)

进入到/usr/local/mycat/bin/

它下面的mycat是启动文件

./mycat start 启动

./mycat stop 停止

./mycat restart 重启

./mycat status 查看mycat的启动状态

这样mycat就安装好了

4.mycat分库分表实例

1)需求

前面也提到了,mycat安装在了192.168.68.3这台机器上,并且前提装好了jdk。

192.168.68.6装了个单机版的mysql。在这个上面,创建3个数据库db1/db2/db3,这几个库中都建一张item(商品表)

建表语句很简单

  1. CREATE TABLE `item` (
  2. `id` int(11) NOT NULL COMMENT '主键id',
  3. `name` varchar(20) DEFAULT NULL COMMENT '名称',
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

70 2
到时想测试下操作192.168.68.3的mycat,进行读和写操作。它是怎么把数据存到192.168.68.6的三个库的各个表中,以及怎么读取 的。

在安装目录的/usr/local/mycat/conf文件夹下,是mycat的各种配置文件存储的地方。

而简单的分库分表操作,需要修改这三个配置文件

schema.xml

server.xml

rule.xml

70 3

而文件的修改,如果直接看可能不太方便,可以用notepad++等工具远程连接

插件的下载,地址如下:https://github.com/ashkulz/NppFTP/releases/

插件的安装,地址如下:https://www.cnblogs.com/beijinglaolei/p/7710825.html

schema.xml配置

注意用户名连接的schema的TESTDB要和schema.xml和保持一致

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
  5. <!-- auto sharding by id (long) -->
  6. <table name="item" dataNode="dn1,dn2,dn3" rule="mod-long" />
  7. </schema>
  8. <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
  9. /> -->
  10. <dataNode name="dn1" dataHost="localhost1" database="db1" />
  11. <dataNode name="dn2" dataHost="localhost1" database="db2" />
  12. <dataNode name="dn3" dataHost="localhost1" database="db3" />
  13. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
  14. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  15. <heartbeat>select user()</heartbeat>
  16. <!-- can have multi write hosts -->
  17. <writeHost host="hostM1" url="192.168.68.6:3306" user="root"
  18. password="root">
  19. </writeHost>
  20. </dataHost>
  21. </mycat:schema>
  22. server.xml
  23. <user name="root">
  24. <property name="password">root</property>
  25. <property name="schemas">TESTDB</property>
  26. <!-- 表级 DML 权限设置 -->
  27. <!--
  28. <privileges check="false">
  29. <schema name="TESTDB" dml="0110" >
  30. <table name="tb01" dml="0000"></table>
  31. <table name="tb02" dml="1111"></table>
  32. </schema>
  33. </privileges>
  34. -->
  35. </user>

Balance——负载均衡类型,目前的取值有4 种:

  1. balance=”0″, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
  2. balance=”1″,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
  3. balance=”2″,所有读操作都随机的在 writeHost、readhost 上分发。
  4. balance=”3″,所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

而连接的默认端口是8066

70 4

我用的sqlyog工具,发现查不到表,而用命令行的客户端连接,或使用Navicat连接都没问题

  1. INSERT INTO item(id, NAME) VALUES(1, 'a');
  2. INSERT INTO item(id, NAME) VALUES(2, 'b');
  3. INSERT INTO item(id, NAME) VALUES(3, 'c');
  4. INSERT INTO item(id, NAME) VALUES(4, 'd');
  5. INSERT INTO item(id, NAME) VALUES(5, 'f');
  6. INSERT INTO item(id, NAME) VALUES(6, 'g');
  7. SELECT * FROM item;

70 5

插入了6条数据,可以看到查询出来的不是按照顺序的。

而看192.168.68.6的db1/db2/db3的库

db1:

70 6

db2:

70 7

db3:

70 8

虽然分库了,但可以通过排序将不同库中的数据在查询后,在mycat中排序

70 9

原文链接:https://blog.csdn.net/dulinanaaa/article/details/82686470

如有披露或问题欢迎留言或者入群探讨

20180614130621747

发表评论

表情:
评论列表 (有 0 条评论,274人围观)

还没有评论,来说两句吧...

相关阅读