使用MyCat实现MySQL读写分离
说明
配置MyCat读写分类前需要先配置MySQL的主从复制,参考我上一篇的文章,已经做了比较详细地讲解了。
环境
centos7、MySQL5.7、mycat1.6
配置MyCat账号密码和数据库名(server.xml)
MyCat作为数据库的中间件,对于上层应用来说,他就是一个数据库。因此需要配置数据库的用户名,密码,数据库名,以及读写权限。
下面是MyCat的默认配置(部分):
server.xml
user节点配置用户信息,详细说明如下:
user 用户配置节点
--name 登录的用户名,也就是连接Mycat的用户名
--password 登录的密码,也就是连接Mycat的密码
--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
我这里修改如下(只需要改动user节点信息即可):
<user name="root">
<property name="password">123456</property>
<property name="schemas">db_test</property>
</user>
在 schema.xml 文件中配置读写分离
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 数据库配置,与server.xml中的数据库对应 -->
<schema name="db_test" checkSQLschema="false" sqlMaxLimit="100" dataNode="db_node"></schema>
<!-- 分片配置 -->
<dataNode name="db_node" dataHost="db_host" database="db_test" />
<!-- 物理数据库配置 -->
<dataHost name="db_host" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="mysql_master:3306" user="root"
password="apple">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="mysql_slaver:3306" user="root" password="apple" />
</writeHost>
</dataHost>
</mycat:schema>
这里有几个配置需要说明下:
sqlMaxLimit配置默认查询数量
database为真实数据库名
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL 主从同步的状态决定是否切换
启动mycat
在mycat所在的服务器启动
./mycat start
mysql -uroot -p123456 -P8066 -h127.0.0.1
#stop
./mycat stop
连上之后跟普通的MySQL一模一样
使用Navicat连接mycat
在外网 (相对虚拟机而言)访问mycat,需要配置ip白名单。
配置文件在server.xml中
<!-- 全局SQL防火墙设置 -->
<firewall>
<whitehost>
<host host="192.168.74.1" user="root"/>
<host host="127.0.0.1" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
l</firewall>
这里192.168.74.1为我本机相对虚拟机的ip地址,这里要说明下,如果配置了ip白名单,则127.0.0.1也是要加上才能本地访问的,不然会被拒绝掉。
示例
这里的common是我本地在host文件里设置了映射到mycat所在虚拟机的ip。
这里可以通过在mycat中插入数据检测是否主从复制配置成功,通过修改从数据库的数据来验证是否读写进行分离。
结果
可以看到,mycat读取的是从库的数据 。这说明了,mycat读写分离功能已经实现了。
使用MyCat实现MySQL读写分离的更多相关文章
- 使用Mycat构建MySQL读写分离、主从复制、主从高可用
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能. 从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即S ...
- 基于MYCAT中间件实现MYSQL读写分离
基于mycat实现mysql读写分离 完成主从复制的配置 /* 主节点:192.168.47.101 从节点:192.168.47.102 */ /*mycat为同一网段客户端*/ /* 修改主节点基 ...
- docker环境 mysql读写分离 mycat maxscale
#mysql读写分离测试 环境centos 7.4 ,docker 17.12 ,docker-compose mysql 5.7 主从 mycat 1.6 读写分离 maxscale 2.2.4 读 ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- Mysql读写分离(Mycat版)
(1).读写分离概述 1)工作原理 读写分离是让主数据库处理事务性增删改操作(insert.delete.update),让从数据库处理查询查询操作(select). 2)作用 1.分担负载 2.主从 ...
- Mycat安装并实现mysql读写分离,分库分表
Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...
- Docker安装Mycat并实现mysql读写分离,分库分表
Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...
- mycat 测试主从读写分离
下载解压及创建用户组和目录属性 下载地址:1.https://github.com/MyCATApache/Mycat-download.2.http://dl.mycat.io/ wget http ...
- mysql读写分离的解决方案
来源于网上整理 http://yanwt.iteye.com/blog/1460780 现有三种解决方式实现mysql读写分离 1 程序修改mysql操作类 优点:直接和数据库通信,简单快捷的读写分离 ...
随机推荐
- 2020年python学习进阶方向
相信很多友人在学习python过程都会遇到很多 虽然python入门很容易 但是难免会遇到瓶颈 遇到问题没人交流 很难提升 对此 给你们简单指点学习方向 1.认识python linux基本 ...
- sql注入小姿势
利用/*!union*/可以绕过对union的过滤
- 【代码学习】PYTHON 抛出异常
class ShortInputException(Exception): '''你定义的异常类.''' def __init__(self, length, atleast): Exception. ...
- 2016-2017学年第三次测试赛 问题 F: 签到题
问题 F: 签到题 时间限制: 1 Sec 内存限制: 128 MB提交: 80 解决: 28 提交统计讨论版 题目描述 在计算机网络考试中, 黑帅男神看到一个将IP网络分类的题, 精通C++的他 ...
- 树莓派4B踩坑指南 - (7)root账户及权限设置
树莓派启用root账户 树莓派默认用户是pi 密码为raspberry. root账户默认无密码,但是账户锁定. 开启root账户命令: sudo passwd root #执行后提示设置密码,输入2 ...
- The property does not exist in XML namespace
自定义依赖属性,绑定在xaml文件中,无问题. 但是编译失败,报 The property does not exist in XML namespace 错误. 发现如果依赖属性定义在本程序集中,在 ...
- ip命令规范
从centos7以前我们一直使用ifconfig命令来执行网络相关的任务,比如检查和配置网卡信息,但是ifconfig已经不再被维护,并且在最近版本的Linux中被废除了!ifconfig命令已经被i ...
- Flask - 运行APP
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return 'Hello, ...
- ISBN号码(0)<P2008_1>
ISBN号码 (isbn.pas/c/cpp) [问题描述] 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxx ...
- 多项式输出 (0)<P2009_1>
多项式输出 (poly.pas/c/cpp) [问题描述] 一元n次多项式可用如下的表达式表示: 其中,称为i次项,ai称为i次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输 ...