(十五)mysql中间件MyCAT实现
1)拓扑如下和实现目标

写操作:都在master
读操作:在slave1上
当master1挂了,写操作自动切换到master2上
当master2挂了,写操作自动切换到master1上
2)Mycat环境安装jdk:省略
3)下载安装MyCAT
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local
4)配置web服务器连接MyCAT的用户名,密码和数据名
#vim /usr/local/mycat/conf/server.xml 这是web服务器连接mycat的用户名和密码,以及schemas文件对应的名字
<user name="root">
<property name="password">123456</property>
<property name="schemas">testdb</property>
</user>
注释以下内容
<!--
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
-->
4)配置MyCAT连接后端数据库相关信息
schema name = testdb 是web服务器连接Mycat看见的数据库
database=“testdb”是真正数据库名
我这里环境是双主一从
:验证后端服务是否可用
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="dbpool" database="testdb" />
<dataHost name="dbpool" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master1" url="192.168.1.31:3306" user="mycat" password="Mycat@123">
<readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
</writeHost>
<writeHost host="master2" url="192.168.1.32:3306" user="mycat" password="Mycat@123">
<readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
</writeHost>
</dataHost>
</mycat:schema>
- balance属性
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 没有。
- write type属性
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。
- switch type属性
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。
5)在master1上给Mycat创建用户
mysql> grant all on testdb.* to mycat@'192.168.1.%' identified by 'Mycat@123';
mysql> flush privileges;
6)启动Mycat
- 测试mycat上使用能用master创建的账号登录到mysql
mysql -umycat -h192.168.1.31 -pMycat@123
- 启动mycat
/usr/local/mycat/bin/mycat start
- 验证
ps -ef | grep mycat
ss -anltup | grep 8066


7)测试读写分离
- slave开启查看日志
mysql>show variables like 'general_log%';
mysql>set global general_log = ON;
- 在web服务器上连接MyCAT
mysql -h192.168.1.30 -uroot -p123456 -P8066
- 执行查询语句
mysql> select * from testdb.t1;
- 在slave1上查看查询日志:/var/lib/mysql/localhost.log

说明读在从上面执行
当slave1挂机,读会自动切换到主上面查询
当slave1恢复,读会自动切换到从上面查询
8)测试主主切换
- master开启查询日志
mysql>show variables like 'general_log%';
mysql>set global general_log = ON;
- 在web服务器上执行insert语句
mysql> insert into testdb.t1 values(16,'16');
master1上面有看到插入语句

- 把master1停止mysql服务
systemctl stop mysqld
- 在web服务器执行insert语句
mysql> insert into testdb.t1 values(17,'17');
发现插入语句自动切换到master2上面执行

总结:master1由停止服务到正常提供服务又自动加入到mycat监控中

(十五)mysql中间件MyCAT实现的更多相关文章
- MySQL 中间件 mycat 的使用
什么是MYCAT 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融 ...
- Java基础学习笔记二十五 MySQL
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...
- mysql进阶(十五) mysql批量删除大量数据
mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM s ...
- 从零开始学安全(三十五)●mysql 盲注手工自定义python脚本
import requests import string #mysql 手动注入 通用脚本 适用盲注 可以跟具自己的需求更改 def home(): url="url" list ...
- Python学习日记(三十五) Mysql数据库篇 三
使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...
- 三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优
1.实现MySQL读写分离 搭建一主一从结构 配置maxscale代理服务器 测试分离配置 1.1 搭建一主一从结构 192.168.4.51 主 192.168.4.52 从 测试OK 1. ...
- MySQL 中间件汇总比较
360 Atlas 较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目.它是在mysql-proxy 0.8.2版本的基础上,对其进行了优 ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 别人的的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- LeetCode -- Linked List Circle ii
Question: Given a linked list, return the node where the cycle begins. If there is no cycle, return ...
- NS产品演进
NS产品演进 Citrix产品体系================ Citrix产品类别================ NS产品演进================ 产品联系方式========== ...
- [NOIP2018 TG D2T2]填数游戏
题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...
- 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 解题报告
P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has ta ...
- 【NOIP2017 D1 T1 小凯的疑惑】
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- Java中Class<T>与Class<?>的区别
E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确定 ...
- c++虚析构函数的必要性
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数. 可是,为什么要这样做呢?下面用一个小例子来说明: #include<iostream> using namespac ...
- 使用e.target.dataset的问题
在微信开发中我们经常会用到标签中属性的属性值,有时候我们通过 data-* 和 e.target.dateset 来获取属性值会出现一点小bug,即是调用出来的数据是undefined. 1)方案1– ...
- DOM 2
1.对文档的信息进行检索常用的方法: getElementById; getElementsByTagName; getAttribute;//得到的是属性值 2把需要的信息添加到DOM中常用的方法: ...
- Spring--环境配置
目录 1.1 Spring jar包下载 1.2 Hello World 参考资料 1.1 Spring jar包下载 (1)进入官网http://repo.spring.io(或者 http://m ...