系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。 安装Mycat官网:http://www./ 可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。 Mycat下载地址:http://dl./ 官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。 下载: 建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本。 安装: 根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。) Mycat的安装其实只要解压下载的目录就可以了,非常简单。 安装完成后,目录如下:
配置Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。 我们现在做一个主从、读写分离,简单分表的示例。结构如下图:
Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/ server.xml 示例 重点关注下面这段,其他默认即可。
我这里配置了一个账号test 密码也是test,针对数据库lunch,读写权限都有,没有针对表做任何特殊的权限。 schema.xml schema.xml是最主要的配置项,首先看我的配置文件。
每个节点的属性逐一说明: schema:
table:
dataNode
dataHost
应用场景数据库分表分库 配置如下: 我在192.168.0.2、192.168.0.3均有数据库lunch。 lunchmenu、restaurant、userlunch、users这些表都只写入节点dn1,也就是192.168.0.2这个服务,而dictionary写入了dn1、dn2两个节点,也就是192.168.0.2、192.168.0.3这两台服务器。分片的规则为:mod-long。 主要关注rule属性,rule属性的内容来源于rule.xml这个文件,Mycat支持10种分表分库的规则,基本能满足你所需要的要求,这个必须赞一个,其他数据库中间件好像都没有这么多。 table中的rule属性对应的就是rule.xml文件中tableRule的name,具体有哪些分表和分库的实现,建议还是看下文档。我这里选择的mod-long就是将数据平均拆分。因为我后端是两台物理库,所以rule.xml中mod-long对应的function count为2,见下面部分代码: 数据库读写分离配置如下: 这样的配置与前一个示例配置改动如下: 删除了table分配的规则,以及datanode只有一个 datahost也只有一台,但是writehost总添加了readhost,balance改为1,表示读写分离。 以上配置达到的效果就是102.168.0.2为主库,192.168.0.3为从库。 注意:Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mycat的主从复制将数据复制到readhost,这个问题当时候我纠结了好久,数据写入writehost后,readhost一直没有数据,以为是自己配置的问题,后面才发现Mycat就没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。 至于其他的场景,如同时主从和分表分库也是支持的了,只要了解这个实现以后再去修改配置,都是可以实现的。而热备及故障专业官方推荐使用haproxy配合一起使用,大家可以试试。 使用Mycat的启动也很简单,启动命令在Bin目录: 如果在启动时发现异常,在logs目录中查看日志。
mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好的执行。 Mycat带来的最大好处就是使用是完全不用修改原有代码的,在mycat通过命令启动后,你只需要将数据库连接切换到Mycat的地址就可以了。如下面就可以进行连接了: 连接成功后可以执行sql脚本了。 所以,可以直接通过sql管理工具(如:navicat、datagrip)连接,执行脚本。我一直用datagrip来进行日常简单的管理,这个很方便。 Mycat还有一个管理的连接,端口号是9906. 连接后可以根据管理命令查看Mycat的运行情况,当然,喜欢UI管理方式的人,可以安装一个Mycat-Web来进行管理,有兴趣自行搜索。 简而言之,开发中使用Mycat和直接使用Mysql机会没有差别。 常见问题使用Mycat后总会遇到一些坑,我将自己遇到的一些问题在这里列一下,希望能与大家有共鸣:
参考《Mycat权威指南》: http://www./document/Mycat_V1.6.0.pdf 官网 :http://www./ 如果想熟练使用Mycat,建议要仔细看看官方推荐的文档,可能需要花点时间。本文只是简单的介绍下Mycat的配置,希望能快速让大家对Mycat有个认识,官方的文档理解起来也很容易,只是需要的时间更多,本文为说明的参数,请参考官方文档。 |
|