1. 一主一从 启动
1.1 下载配置
凡是学习新技术,借鉴博主的文章可以快速入门,但是,最新最全的文档总是在官方文档
首先,从官网下载 https://github.com/MyCATApache/Mycat-download
下载解压好文件后,可以放在/usr/local/路径下,我这边习惯放在自己新建文件夹/app/路径下
1.2 逻辑库配置:
配置server.xml
可以理解成mycat 就是一个巨型数据库 , 默认提供了下面的两个用户,root , user
<user name="root">
<property name="password">123456</property>
<!-- 数据库 -->
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<!-- 数据库 -->
<property name="schemas">TESTDB</property>
<!-- 只读 -->
<property name="readOnly">true</property>
</user>
在使用之前需要搭建好MySQL 主从复制环境 ,可以看 MySQL 主从复制环境 docker 快速搭建教程
修改scheme.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 设置逻辑库 , schema name 属性就是mycat 的逻辑库 指定dataNode -->
<schema name="TESTDB" dataNode="dn1" checkSQLschema="false" sqlMaxLimit="100">
</schema>
<!-- 设置数据节点 , 指定dataHost 在下面配置的 database 就是具体数据库中指向的库-->
<dataNode name="dn1" dataHost="host1" database="TESTDB" />
<!-- 设置数据访问 , 指定连接 数 与负载均衡-->
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 设置心跳监测 ,-->
<heartbeat>select user()</heartbeat>
<!-- 设置写库 相关的访问参数-->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="chennewtoo_">
<!-- can have multi read hosts -->
<!-- 设置读库 相关的访问参数 这里初步是一主一从 所以配置一个即可-->
<readHost host="hostS2" url="localhost:3307" user="root" password="chennewtoo_" />
</writeHost>
</dataHost>
</mycat:schema>
其中关键一点 , 负载均衡,一般都是 设置为 balance=1 , balance = 3
1.3 启动
然后在bin/mycat console
启动 看到打印successful 就成功,其他错误,如数据库不存在,连接不存在,检查具体的数据库中是否存在库与连接参数是否正确
1.4 验证连接
mycat 使用Java 写的,在启动完成后会暴露端口,与mysql相同的连接方式,其端口有两个:
2. 双主双从 启动
单主单从,虽然能够分担读操作的压力,但是不能排除单点故障,因此还是要做双主的主备自动切换
2.1 配置参数
首先,需要把数据库配置成为双主双从环境,可以看 MySQL 主从复制搭建 双主双从 主从切换 环境搭建
修改scheme.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" dataNode="dn1" checkSQLschema="false" sqlMaxLimit="100">
</schema>
<dataNode name="dn1" dataHost="host1" database="TESTDB" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root"
password="chennewtoo_">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="localhost:3307" user="root" password="chennewtoo_" />
</writeHost>
<!-- 新增一个写节点 与对应的读节点 -->
<writeHost host="hostM2" url="localhost:33060" user="root"
password="chennewtoo_">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="localhost:33070" user="root" password="chennewtoo_" />
</writeHost>
</dataHost>
</mycat:schema>
同时这里也讲述以下这两个参数 :
- writeType=“0”
- switchType=“1”
看到这里应该清楚,mycat 的配置逻辑其实很简单,增加对应的节点与数据库对应上即可
2.2 启动验证
启动mycat
同样使用bin/mycat console
启动后,连接8066端口mycat
插入数据后,登录其他库,查看数据同步情况,
验证主备切换
将3306端口关闭后,插入,查询数据钧正常
可以使用 insert into table values(@@hostname)
知道当前的写库是哪个 , 然后 , 将 3306 服务启动 , 可以看到3306 数据也同步回来 , 但是已经成了备库 , 而不是主库