简介
使用mycat中间件对mysql进行读写分离。
配置流程
配置mysql主从复制
(主从复制配置的过程链接
https://blog.csdn.net/u011177064/article/details/102698002)
使用mycat 配置读写分离
验证是否读写分离效果
Mycat配置读写分离
Mycat官网:http://www.mycat.io/
Mycat下载地址:http://dl.mycat.io/
Mycat的安装其实只要解压下载的目录就可以了,非常简单。
安装完成后,目录如下:
目录 |
说明 |
bin |
mycat命令,启动、重启、停止等 |
catlet |
catlet为Mycat的一个扩展功能 |
conf |
Mycat 配置信息,重点关注 |
lib |
Mycat引用的jar包,Mycat是java开发的 |
logs |
日志文件,包括Mycat启动的日志和运行的日志。 |
Mycat的配置文件都在conf目录里面
文件 |
说明 |
server.xml |
Mycat的配置文件,设置账号、参数等 |
schema.xml |
Mycat对应的物理数据库和数据库表的配置 |
rule.xml |
Mycat分片(分库分表)规则 |
Mycat对外实现了一套跟mysql一样的通讯协议,所以应用代码不用做任何调整,只需要将jdbc链接改为mycat的即可
默认配置
9066:mycat 管理端口
8066:mycat 数据连接端口(应用只需要将之前mysql的连接替换成这个即可使用)
实现读写分离主要是针对 schema.xml 进行配置
<schema name="pingtuan" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="pingtuanrw" database="pingtuan" />
<!-- 物理数据库配置 -->
<dataHost name="pingtuanrw" maxCon="2000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user();</heartbeat>
<writeHost host="hostM1" url="172.16.0.10:3306" user="pingtuan" password="xxxxxxxxxx">
<readHost host="hostS1" url="172.16.0.17:3306" user="pingtuan" password="xxxxxxxxxx">
</readHost>
</writeHost>
</dataHost>
schema:
属性 |
说明 |
name |
逻辑数据库名,与server.xml中的schema对应 |
checkSQLschema |
数据库前缀相关设置,建议看文档,这里暂时设为folse |
sqlMaxLimit |
select 时默认的limit,避免查询全表 |
table:
属性 |
说明 |
name |
表名,物理数据库中表名 |
dataNode |
表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name |
primaryKey |
主键字段名,自动生成主键时需要设置 |
autoIncrement |
是否自增 |
rule |
分片规则名,具体规则下文rule详细介绍 |
dataNode
属性 |
说明 |
name |
节点名,与table中dataNode对应 |
datahost |
物理数据库名,与datahost中name对应 |
database |
物理数据库中数据库名 |
dataHost
属性 |
说明 |
name |
物理数据库名,与dataNode中dataHost对应 |
balance |
均衡负载的方式 |
writeType |
写入方式 |
dbType |
数据库类型 |
heartbeat |
心跳检测语句,注意语句结尾的分号要加。 |
Mycat命令
Mycat的启动也很简单,启动命令在Bin目录:
##启动
mycat start
##停止
mycat stop
##重启
mycat restart
如果在启动时发现异常,在logs目录中查看日志。
wrapper.log 为程序启动的日志
mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。
mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。
读写分离验证
首先强调下,字符集utf8mb4的设定,除了mysql本身需要设定utf8mb4之外,mycat也需要配置字符utf8mb4设置,不然会出现问题。
读写分离效果验证
设置 mycat 的debug 日志模式:(生产环境一定要改回info,日志会非常大)
/usr/java/mycat/conf/log4j2.xml
查看mycat日志:
验证查询SQL 是否在读库上执行:
验证更新SQL 是否在写库上执行: