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实现的更多相关文章

  1. MySQL 中间件 mycat 的使用

    什么是MYCAT 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融 ...

  2. Java基础学习笔记二十五 MySQL

    MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...

  3. mysql进阶(十五) mysql批量删除大量数据

    mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM s ...

  4. 从零开始学安全(三十五)●mysql 盲注手工自定义python脚本

    import requests import string #mysql 手动注入 通用脚本 适用盲注 可以跟具自己的需求更改 def home(): url="url" list ...

  5. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

  6. 三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优

    1.实现MySQL读写分离 搭建一主一从结构 配置maxscale代理服务器 测试分离配置   1.1 搭建一主一从结构 192.168.4.51 主 192.168.4.52 从 测试OK   1. ...

  7. MySQL 中间件汇总比较

    360 Atlas 较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目.它是在mysql-proxy 0.8.2版本的基础上,对其进行了优 ...

  8. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  9. 别人的的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. LeetCode -- Linked List Circle ii

    Question: Given a linked list, return the node where the cycle begins. If there is no cycle, return  ...

  2. NS产品演进

    NS产品演进 Citrix产品体系================ Citrix产品类别================ NS产品演进================ 产品联系方式========== ...

  3. [NOIP2018 TG D2T2]填数游戏

    题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...

  4. 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 解题报告

    P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has ta ...

  5. 【NOIP2017 D1 T1 小凯的疑惑】

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...

  6. Java中Class<T>与Class<?>的区别

    E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确定 ...

  7. c++虚析构函数的必要性

    我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数. 可是,为什么要这样做呢?下面用一个小例子来说明: #include<iostream> using namespac ...

  8. 使用e.target.dataset的问题

    在微信开发中我们经常会用到标签中属性的属性值,有时候我们通过 data-* 和 e.target.dateset 来获取属性值会出现一点小bug,即是调用出来的数据是undefined. 1)方案1– ...

  9. DOM 2

    1.对文档的信息进行检索常用的方法: getElementById; getElementsByTagName; getAttribute;//得到的是属性值 2把需要的信息添加到DOM中常用的方法: ...

  10. Spring--环境配置

    目录 1.1 Spring jar包下载 1.2 Hello World 参考资料 1.1 Spring jar包下载 (1)进入官网http://repo.spring.io(或者 http://m ...