2、MyCat读写分离
1.主从复制
搭建mycat的读写分离,首先我们现需要搭建mysql的主从复制
[1].Mysql主从复制原理
[2].MySQL主从复制配置
(1).主机配置
|
修改配置文件:vim /etc/my.cnf #主服务器唯一ID server-id=1 #启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schema #设置需要复制的数据库 注:如果指定则只复制指定的数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT |
binlog 日志三种格式

(2).从机配置
|
修改配置文件:vim /etc/my.cnf #从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay |
(3).主机、从机重启Mysql服务
|
[root@host79 ~]# service mysql restart [root@host80 ~]# service mysql restart |
(4).主、从机关闭防火墙
关闭防火墙或者配置防火墙即可,本着简单原则我们关闭防火墙
(1.centos6.8
若系统是centos6.8则使用以下命令
|
[root@host79 ~]# service iptables stop [root@host80 ~]# service iptables stop |
(2.centos7
若系统是centos7则使用以下命令
|
[root@host79 ~]# systemctl status firewalld [root@host79 ~]# systemctl stopfirewalld [root@host80 ~]# systemctl status firewalld [root@host80 ~]# systemctl stop firewalld |
(5)主机建立帐户salve并授权
|
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; #在主机MySQL里执行授权命令 mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; #查看用户是否添加成功 mysql> select host,user,password from mysql.user; |

(6)查询master的状态
|
mysql> show master status; #记录下File和Position的值 #执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化 |

(7)从机上配置需要复制的主机
|
#复制主机的命令 CHANGE MASTER TO MASTER_HOST='主机的IP地址', MASTER_USER='slave', MASTER_PASSWORD='123123', MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值; #停止从服务器复制功能 stop slave; #启动从服务器复制功能 start slave; #设置从服务器复制功能 reset master; #查看从服务器状态 show slave status\G; |
|
[root@host80 ~]# mysql -uroot -p123456 mysql> stop slave; mysql> reset master; mysql> CHANGE MASTER TO MASTER_HOST='192.168.188.188', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000018',MASTER_LOG_POS=107; mysql> start slave; mysql> show slave status\G; |
#下面两个参数都是Yes,则说明主从配置成功!
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

(8).测试
|
#host79 mysql> create database testdb; mysql> use testdb; Database changed mysql> create table mytbl(id int,name varchar(20)); Query OK, 0 rows affected (0.04 sec) mysql> insert into mytbl values(1,'zhang3'); Query OK, 1 row affected (0.15 sec) #host80 mysql> show databases; mysql> use testdb; mysql> select * from mytbl; |


[3].一主一从读写分离
(1).查看读写分离
在未配置schema.xml文件情况下,不会实现读写分离
|
[root@host79 ~]# mysql -uroot -p123456 mysql> use testdb; mysql> insert into mytbl values(1,@@hostname); mysql> select * from mytbl; [root@host80 ~]# mysql -uroot -p123456 mysql> use testdb; mysql> select * from mytbl; [root@host79 ~]# mysql -umycat -p123456 -h192.168.188.188 -P 8066 mysql> use TESTDB; mysql> select * from mytbl; mysql> select * from mytbl; |


(2).schema.xml
修改<dataHost>的balance属性,通过此属性配置读写分离的类型
|
负载均衡类型,目前的取值有4 种: (1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 (2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从 模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。 (3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。 (4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力 |

|
[root@host79 conf]# pwd /usr/local/mycat/conf [root@host79 conf]# vim schema.xml balance="2" [root@host79 bin]# pwd /usr/local/mycat/bin [root@host79 bin]# ./mycat console |

2.双主双从
|
编号 |
角色 |
IP地址 |
机器名 |
|
1 |
Master1 |
192.168.188.188 |
host79.pluto |
|
2 |
Slave1 |
192.168.188.189 |
host80.pluto |
|
3 |
Master2 |
192.168.188.190 |
host81.pluto |
|
4 |
Slave2 |
192.168.188.191 |
host82.pluto |
[1].双主双从配置
(1).Master1配置
|
修改配置文件:vim /etc/my.cnf #主服务器唯一ID server-id=1 #启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schema #设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT # 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535 auto-increment-increment=2 # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535 auto-increment-offset=1 |
(2).Master2配置
|
修改配置文件:vim /etc/my.cnf #主服务器唯一ID server-id=3 #启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql binlog-ignore-db=information_schema #设置需要复制的数据库 binlog-do-db=需要复制的主数据库名字 #设置logbin格式 binlog_format=STATEMENT # 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535 auto-increment-increment=2 # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535 auto-increment-offset=2 |
(3).Slave1配置
|
修改配置文件:vim /etc/my.cnf #从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay |
(4).Slave2配置
|
修改配置文件:vim /etc/my.cnf #从服务器唯一ID server-id=4 #启用中继日志 relay-log=mysql-relay |
[2].双主双从重启mysql服务
|
[root@host79 ~]# service mysql restart [root@host80 ~]# service mysql restart [root@host81 ~]# service mysql restart [root@host82 ~]# service mysql restart |
[3].双主双从关闭防火墙
|
[root@host79 ~]# service iptables stop [root@host80 ~]# service iptables stop [root@host81 ~]# service iptables stop [root@host82 ~]# service iptables stop |
[4].主机建立账户salve并授权
|
[root@host79 ~]# mysql -uroot -p123456 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; [root@host81 ~]# mysql -uroot -p123456 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; |
(1).查看Master状态
|
#Master1 mysql> show master status; #Master2 mysql> show master status; #分别记录下File和Position的值 #执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化 |


[5].MySQL主-从复制配置
Slava1 复制 Master1
|
[root@host80 ~]# mysql -uroot -p123456 mysql> stop slave; mysql> reset salve; mysql> CHANGE MASTER TO MASTER_HOST='192.168.188.188', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000019',MASTER_LOG_POS=107; mysql> start slave; mysql> show slave status\G; #下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes # Slave_SQL_Running: Yes |

Slava2 复制 Master2
|
[root@host82 ~]# mysql -uroot -p123456 mysql> stop slave; mysql> reset salve; mysql> CHANGE MASTER TO MASTER_HOST='192.168.188.190', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000011',MASTER_LOG_POS=365; mysql> start slave; mysql> show slave status\G; #下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes # Slave_SQL_Running: Yes |

[6].主-主复制配置
Master1复制Master2
|
mysql> CHANGE MASTER TO MASTER_HOST='192.168.188.190', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000011',MASTER_LOG_POS=365; mysql> start slave; mysql> show slave status\G; #下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes # Slave_SQL_Running: Yes |

Master2复制Master1
|
mysql> CHANGE MASTER TO MASTER_HOST='192.168.188.188', -> MASTER_USER='slave', -> MASTER_PASSWORD='123456', -> MASTER_LOG_FILE='mysql-bin.000019',MASTER_LOG_POS=107; mysql> start slave; mysql> show slave status\G; #下面两个参数都是Yes,则说明主从配置成功! # Slave_IO_Running: Yes # Slave_SQL_Running: Yes |

[7].测试

3.双主双从读写分离
|
负载均衡类型,目前的取值有4 种: (1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 (2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从 模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。 (3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。 (4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力 |
|
#为了双主双从读写分离balance设置为1 <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="host1" database="testdb" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.188.188:3306" user="root" password="123456"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.188.189:3306" user="root" password="123456" /> </writeHost> <writeHost host="hostM2" url="192.168.188.190:3306" user="root" password="123456"> <!-- can have multi read hosts --> <readHost host="hostS2" url="192.168.188.191:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> #balance="1": 全部的readHost与stand by writeHost参与select语句的负载均衡。 #writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个 #writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐 #writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。 #switchType="1": 1 默认值,自动切换。 # -1 表示不自动切换 # 2 基于 MySQL 主从同步的状态决定是否切换。 |
2、MyCat读写分离的更多相关文章
- web 项目 连接mycat 读写分离失效问题,
问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决 :环境spring +mvc +ibaites,在java中自己写j ...
- LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)
1 配置MYSQL主备同步 1.1 测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...
- LVS+MYCAT+读写分离+MYSQL主备同步部署手册
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)
LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1 配置MYSQL主备同步…. 2 1.1 测试环境… 2 1.2 配置主数据库… 2 1.2.1 ...
- mysql主从同步+mycat读写分离+.NET程序连接mycat代理
背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...
- MyCat读写分离-笔记(四)
概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...
- Mycat读写分离、主从切换、分库分表的操作记录
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- Mycat读写分离、主从切换学习(转)
http://blog.csdn.net/zhanglei_16/article/details/50707487 Mycat读写分离.主从切换学习问题一:分表.分库的优缺点,以及分表无法成为主流分表 ...
- mycat读写分离与主从切换【转】
什么是mycat,以及mycat的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对mycat的基础功能实践.本文mycat的读写分离和主从切换的环境为mysql主从环境. 如何安装my ...
- Mycat 读写分离
简介 Mycat 是 MySQL中间件,Mycat的原理中最重要的一个动词就是'拦截',它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分 ...
随机推荐
- 怎么用MindManager2019去做一个好的网络图
大家知道网络图吗?是由作业(箭线).事件(又称节点)和路线三个因素组成的.它是一种图解模型,形状如同网络,故称为网络图.运用网络图能够使步骤简洁明了,今天我我们就说一说网络图软件MindManager ...
- centos克隆虚拟机
首先我们把所要克隆的虚拟机关机,然后在所要克隆的虚拟机上右键,选择管理,选择克隆,出现如下界面: 点击下一步,选择虚拟机的当前状态,继续点击下一步 接着选择创建完整克隆,选择这个时,表明克隆出来的这个 ...
- 2020.6.16 night 解题报告
2020.6.16 night 解题报告 link 标签(空格分隔): 题解 概率与期望 T1 : Crossing Rivers UVA - 12230 SB题. 很唬人的一个连续期望. 很明显,在 ...
- 【坑爹的mybtis plus】wrapper.in击垮了我们的数据库!
mybatis plus让我们从很大程度上实现了用"java去写sql",但是有些很隐晦的使用方式,如果不注意的话,也会引起错误: 如果.in的时候给了一个null,这个时候并不会 ...
- Mybatis学习-初步认知与使用
Mybatis是一款优秀的持久层框架.且支持定制化SQL,存储过程以及高级映射 Mybatis几乎免除了所有的JDBC代码以及设置参数和获取结果集的工作,它使用简单的XML或注解来配置原始类型.接口和 ...
- java导出excel并且压缩成zip上传到oss,并下载,使用字节流去存储,不用文件流保存文件到本地
最近项目上要求实现导出excel并根据条数做分割,然后将分割后的多个excel打包成压缩包上传到oss服务器上,然后提供下载方法,具体代码如下:这里只展示部分代码,获取数据的代码就不展示了 ByteA ...
- 码农飞升记-Java是什么?
1.Java概述 Java 原名 Oak 是 Sun Microsystems 公司的 James Gosling 及其团队于 1995 年 5 月推出的 Java 程序设计语言 和 Java 平台 ...
- IdentityServer4系列 | 快速搭建简易项目
一 .前言 从上一篇关于 常见术语说明中,主要是对IdentityServer4的说明,以及其中涉及常见的术语的表述说明,包括对身份认证服务器.用户.客户端.资源以及各个令牌等进行对比区别说明. 而在 ...
- Spring Boot 自带缓存及结合 Redis 使用
本文测试环境: Spring Boot 2.1.4.RELEASE + Redis 5.0.4 + CentOS 7 自带缓存 如果没有使用缓存中间件,Spring Boot 会使用默认的缓存,我们只 ...
- python MD5加密和flask-generate_password_hash
实际开发过程中,有些数据是需要加密保存或者处理的,为了就是为了保证源数据的安全性.那么MD5加密作为一种简单有效的非对称加密方式在日常开发过程中也经常的被使用到.下面就来介绍下MD5算法: 1. * ...