前端之家收集整理的这篇文章主要介绍了
学会数据库读写分离、分表分库——用Mycat,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:sql语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。
Mycat官网:
可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。
Mycat下载地址:
官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。
下载:
建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本。
安装:
根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。)

Mycat的安装其实只要解压下载的目录就可以了,非常简单。
安装完成后,目录如下:
</tr>
<tr class="even">
<td>catlet</td>
<td>catlet为Mycat的一个扩展功能</td>
</tr>
<tr class="odd">
<td>conf</td>
<td>Mycat 配置信息,重点关注</td>
</tr>
<tr class="even">
<td>lib</td>
<td>Mycat引用的jar包,Mycat是java开发的</td>
</tr>
<tr class="odd">
<td>logs</td>
<td>日志文件,包括Mycat启动的日志和运行的日志。</td>
</tr>
Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
配置文件,设置账号、参数等</tr>
<tr class="even">
<td>schema.xml</td>
<td>Mycat对应的物理数据库和数据库表的配置</td>
</tr>
<tr class="odd">
<td>rule.xml</td>
<td>Mycat分片(分库分表)规则</td>
</tr>
Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理
数据库。和Web服务器的
Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的
数据库。
我们现在做一个主从、读写分离,简单分表的示例。结构如下图:

数据库时,连接此服务器</tr>
<tr class="even">
<td>database1</td>
<td>192.168.0.3</td>
<td>物理数据库1,真正存储数据的数据库</td>
</tr>
<tr class="odd">
<td>database2</td>
<td>192.168.0.4</td>
<td>物理数据库2,真正存储数据的数据库</td>
</tr>
Mycat作为主
数据库中间件,肯定是与
代码弱关联的,所以
代码是不用
修改的,使用Mycat后,连接
数据库是不变的,默认端口是8066。连接方式和普通
数据库一样,如:jdbc:
MysqL://192.168.0.2:8066/
server.xml
示例
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user></pre>
"schema.dtd">
<schema name="lunch" check<a href="/tag/sql/" target="_blank" class="keywords">sql</a>schema="false" <a href="/tag/sql/" target="_blank" class="keywords">sql</a>MaxLimit="100">
<table name="lunchmenu" dataNode="dn1" />
<table name="restaurant" dataNode="dn1" />
<table name="userlunch" dataNode="dn1" />
<table name="users" dataNode="dn1" />
<table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="test1" database="lunch" />
<dataNode name="dn2" dataHost="test2" database="lunch" />
<dataHost name="test1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="<a href="/tag/MysqL/" target="_blank" class="keywords">MysqL</a>" dbDriver="native">
<heartbeat>select user();</heartbeat>
<writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="test2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="<a href="/tag/MysqL/" target="_blank" class="keywords">MysqL</a>" dbDriver="native">
<heartbeat>select user();</heartbeat>
<writeHost host="hostS1" url="192.168.0.3:3306" user="root" password="123456">
</writeHost>
</dataHost>