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读写分离的更多相关文章

  1. web 项目 连接mycat 读写分离失效问题,

    问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决      :环境spring +mvc +ibaites,在java中自己写j ...

  2. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  3. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  4. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  5. mysql主从同步+mycat读写分离+.NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

  6. MyCat读写分离-笔记(四)

    概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...

  7. Mycat读写分离、主从切换、分库分表的操作记录

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  8. Mycat读写分离、主从切换学习(转)

    http://blog.csdn.net/zhanglei_16/article/details/50707487 Mycat读写分离.主从切换学习问题一:分表.分库的优缺点,以及分表无法成为主流分表 ...

  9. mycat读写分离与主从切换【转】

    什么是mycat,以及mycat的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对mycat的基础功能实践.本文mycat的读写分离和主从切换的环境为mysql主从环境. 如何安装my ...

  10. Mycat 读写分离

    简介 Mycat 是 MySQL中间件,Mycat的原理中最重要的一个动词就是'拦截',它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分 ...

随机推荐

  1. pandas 对时间索引进行分割

    截取最近1个月时间,截取最近一段时间,进行统计分析 df.loc["2016-01-05":"2016-02-05",:].tail() 在index为有序数据 ...

  2. Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程)

    1.简介 LoadRunner的录制功能让性能测试脚本编写对于不懂代码的人变成了一件容易上手的事,但是由于LoadRunner收费高昂,庞大,一般企业很少用,除非必须使用.Jmeter作为性能测试中的 ...

  3. 如何在MathType输入手写体a

    作为强大的数学公式编辑器,MathType中还能设置各种样式,还支持自定义设置,给大家编辑公式提供了更多的便利.那么有用户问:要如何将输入的字母a变为手写体呢?下面就来一起学习. 输入手写体a的步骤如 ...

  4. 337. 打家劫舍 III(树上dp)

    在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个" ...

  5. linux命令-awk,sort,uniq

    学习地址:http://man.linuxde.net/awk#awk的工作原理 awk 选项参数说明: -F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字 ...

  6. Mybatis【1】-- 第一个Mybatis程序

    1.框架是什么 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面 ...

  7. 【JVM】jdk1.8移除方法区与metaspace

    转载:https://blog.csdn.net/aa747604141/article/details/52673582 https://www.jianshu.com/p/a6f19189ec62

  8. Flash----一种VirtualActor模式的分布式有状态系统原型

    首先, 这个Flash不是我们在浏览器用的Flash这种技术, 而是: 动作缓慢, 车速极快------闪电(Flash). 18年的某一个周末, 即兴用Python写了一个Virtual Actor ...

  9. JZOJ 2020.10.7 提高B组反思

    JZOJ 2020.10.7 提高B组反思 T1 比较简单的一道题 跑\(k\)遍\(SPFA\) 然后全排列顺序枚举求解 TLE 60 双向存边数组没开两倍-- T2 搞出分母 分子不会求 \(n^ ...

  10. 在 Spring Boot 配置 Kafka 安全认证

    spring: kafka: bootstrap-servers: IP:端口 listener: missing-topics-fatal: false properties: sasl: mech ...