前言
读写分离本身是没有主从复制的,我们要配置主从复制后再配置读写分离。
现在常见的两种方式
- 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; |
主从配置
主从连接
这里用到的数据库
mycat
Mycat使用的原型库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 | # 把日志输出到文件(默认设置);关闭日志记录 |