前言
读写分离本身是没有主从复制的,我们要配置主从复制后再配置读写分离。
现在常见的两种方式
- MyCat
 - MySQL Router
 
MyCat
是基于阿里巴巴的Cobar方案优化而来,支持半自动化分片,join。为什么叫”半自动化”呢?因为需要DBA对每个表的分片策略进行配置和干涉。
MySQL Router
MySQL Proxy 和 MySQL Router 是官方提供的两个玩具,不推荐使用。
MySQL Proxy:应用程序连接 MySQL Proxy 后,MySQL Proxy 会自动将写请求和读请求分离,分别发送给 Master 和 Slave。但是官方不建议在生产环境使用 MySQL Proxy。
MySQL Router:是 MySQL Proxy 的替代方案。但是 MySQL Router 启动后,包含读端口和写端口,因此就需要应用程序自己将读和写进行分离,分别发送到 MySQL Router 相应的端口上。应用程序需要额外将读写操作进行分流,麻烦。
MyCat文档
MyCat已经废弃,新的为Mycat 2
https://github.com/MyCATApache/Mycat2
文档:
https://www.yuque.com/ccazhw/ml3nkf/ob0u6a
配置注意项目
- 本文读写分离的数据库为
zdb。 mycat服务和主库在同一服务器上。
JDK
官方下载JDK 网址
链接: https://pan.baidu.com/s/1COHU0dKhBb9x_wWxIwuibw 提取码: psvm
安装
1  | sudo tar -zxvf jdk-8u341-linux-x64.tar.gz -C /usr/local  | 
安装后的路径为/usr/local/jdk1.8.0_341
1  | cd /etc/profile.d/  | 
创建配置文件
1  | sudo vi /etc/profile.d/jdk.sh  | 
加入:
1  | export JAVA_HOME=/usr/local/jdk1.8.0_341  | 
配置立即生效
1  | source /etc/profile  | 
查询java版本
1  | java -version  | 
查看java-home
1  | echo $JAVA_HOME  | 
MyCat下载
MyCat是基于Java开发的,要安装JDK。
1  | wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip  | 
百度云下载
链接:https://pan.baidu.com/s/1bgYByp0Gyv0z-xHIxrsdbg
提取码:psvm 
MyCat安装
创建目录
1  | mkdir -p /data/tools/  | 
解压
1  | unzip mycat2-install-template-1.21.zip -d /data/tools/  | 
查看是否成功
1  | cd /data/tools/mycat/lib/  | 
添加权限
1  | cd /data/tools/mycat/bin  | 
服务配置
以下的配置服务只用配置一次就行。
修改 Mycat 登录用户信息
1  | vi /data/tools/mycat/conf/users/root.user.json  | 
内容如下:
1  | {  | 
只需要修改用户名密码,别的不用更改。
这是远程连接Mycat使用的用户名和密码。
修改 Mycat 服务
1  | cd /data/tools/mycat/conf/  | 
内容
1  | {  | 
主要添加了serverVersion配置
serverVersion中前面是MySQL的版本后面是Mycat的版本
查看Mysql的版本
1  | select version();  | 
mycatId是保证多个mycat公用存储节点的时候必须配置这个值,并且唯一,他用于生成序列号,Xid等.
原型库连接
只用设置一次。
在主节点创建 Mycat 使用的数据库 mycat
1  | CREATE DATABASE IF NOT EXISTS mycat;  | 
这个库称为 Mycat 的原型库(prototype),Mycat 在启动时,会自动在原型库下创建其运行时所需的数据表。
1  | cd /data/tools/mycat/conf/datasources  | 
把mycat带的数据源配置正确
修改配置文件
1  | vi prototypeDs.datasource.json  | 
内容如下
1  | {  | 
主要修改
1  | "password":"123456",  | 
主从库添加
1  | CREATE DATABASE IF NOT EXISTS zdb;  | 
主从配置
主从连接
这里用到的数据库
mycatMycat使用的原型库zdb主库zdb从库
主库连接
新添加其他配置,
1  | cd /data/tools/mycat/conf/datasources  | 
内容如下
1  | {  | 
注意修改其中的
- instanceType 配置实例只读还是读写,可选值:READ_WRITE,READ,WRITE
 - name
 - user
 - password
 - url
 
从库连接
编辑
1  | cp zdb-master.datasource.json zdb-slave-01.datasource.json  | 
内容
1  | {  | 
注意修改其中的
- instanceType
 - name
 - user
 - password
 - url
 
配置集群信息
1  | cd /data/tools/mycat/conf/clusters  | 
内容
1  | {  | 
配置Schema
配置物理库(schema)和 Mycat 中数据源/数据源集群的关系
1  | cd /data/tools/mycat/conf/schemas  | 
内容
1  | {  | 
其中
- schemaName schema名称 可以随便配置。
 targetName 上面配置的集群的名称。
normalTables 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项。
启动Mycat
1  | cd /data/tools/mycat/bin/  | 
停止Mycat
1  | cd /data/tools/mycat/bin/  | 
查看Mycat日志
1  | cd /data/tools/mycat/logs  | 
连接MyCat
1  | mysql -uroot -p -h127.0.0.1 -P8066  | 
注意端口号是Mycat端口号8066
查看数据库
1  | show databases;  | 
验证读写分离
在主从节点均开启日志记录
1  | # 把日志输出到表;开启日志记录  | 
在 Mycat 中分别执行插入和查询语句
1  | show databases;  | 
分别在主从节点执行如下语句,查询 SQL 执行历史
1  | -- 可以看到主节点上有一条 INSERT 和一条 SELECT;从节点上只有一条 SELECT  | 
在主从节点关闭日志记录
1  | # 把日志输出到文件(默认设置);关闭日志记录  |