目录
简单的理解,mycat就是一个数据中间件,可以让开发人员直接访问mycat,然后由mycat去访问具体的数据库服务器,进行数据库的相关操作。而关于读写分离和分库分表,只需要在mycat中进行配置,然后就都由mycat去操作。
一、读写分离
1.1、什么是读写分离
其实就是将数据库分为了主库和从库,主库用于写入数据,从库完成读取数据的操作,主库和从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。
1.2、为什么要用读写分离
大多数的互联网的应用都是读取大于写入操作的,所以,读取的性能就会首先成为数据库服务器的瓶颈问题。读写分离把数据的读取和写入分开多个服务器,很好的解决了数据读取的负载问题。
1.3、使用mycat读写分离
使用mycat进行读写分离,默认是mysql服务器已经做好主从复制,具体可以参考:https://blog.youkuaiyun.com/vatxiongxiaohui/article/details/95195046
1.3.1安装mycat
下载mycat:http://www.mycat.io/

下载linux压缩包,解压,可以看到目录结构如下:主要配置都在conf文件夹中

1.3.2、配置mycat
要做读写分离,首先找到conf下的server.xml文件,配置用户(添加下面代码):
<user name="root" defaultAccount="true">
<property name="password">root</property>
<!-- mycat的逻辑数据库 -->
<property name="schemas">mycatdb</property>
</user>
- 此配置表示我注册了一个账号为root,密码也为root的用户
- 使用的逻辑数据库为mycatdb
然后配置schema.xml文件(我这里是双主双从模式,3307,3308为主服务器,3309,3310为从服务器):
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 作用:配置逻辑数据库 -->
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100">
<!-- 只做读写分离,不做分库分表,schema标签下不用配置table -->
</schema>
<!-- 分片配置 作用:dataNode定义了mycat中的数据节点,也就是我们通常说的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库 -->
<dataNode name="dn1" dataHost="localhost1" database="test01" />
<!-- 物理数据库配置 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳语句,根据此判断mysql是否宕机 -->
<heartbeat>select user()</heartbeat>
<!-- 配置主库,写入节点 -->
<writeHost host="hostM3307" url="localhost:3307" user="root" password="root">
<!-- 配置从库,读取节点 -->
<readHost host="host3308" url="localhost:3308" user="root" password="root" />
<readHost host="host3309" url="localhost:3309" user="root" password="root" />
</writeHost>
<!-- 配置主库,读取节点 -->
<writeHost host="hostM3308" url="localhost:3308" user="root" password="root">
<!-- 配置从库,读取节点 -->
<readHost host="host3307" url="localhost:3307" user="root" password="root" />
<readHost host="host3310" url="localhost:3310" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
| 标签 | 说明 |
| schema | 逻辑数据库,与server.xml中的schema对应 |
| dataNode | 分片信息 |
| dataHost | 物理数据库,真实存储数据的数据库 |
schema属性:
| 属性 | 说明 |
| name | 逻辑数据库名,与server.xml中的schema对应 |
| checkSQLschema | 建议看文档,false |
| sqlMaxLimit | select 时默认的limit,避免查询全表 |
dataNode属性:
| 属性 | 说明 |
| name | 定义数据节点的名字,这个名字需要是唯一的 |
| dataHost | 用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。 |
| database | 用于定义该分片属性哪个具体数据库实例上的具体库 |
dataHost属性:
| 属性 | 说明 |
| name | 唯一标识 dataHost 标签,供上层的标签使用。 |
| maxCon | 指定每个读写实例连接池的最大连接。 |
| minCon | 指定每个读写实例连接池的最小连接 |
| balance | 负载均衡类型,具体看文档,此处选1 |
| writeType | 负载均衡类型 |
| dbType | 指定后端连接的数据库类型 |
| dbDriver | 指定连接后端数据库使用的 Driver, |
| switchType | 自动切换模式 |
至此,读写分离已经配置好了,可以直接登录mycat(默认端口8066,连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/)进行试验。
472

被折叠的 条评论
为什么被折叠?



