写点什么

GitHub 标星过万!10592 字,475 行

发布于: 2021 年 08 月 05 日

)engine=innodb default charset=utf8;


insert into user(id,name,sex) values(null,'Tom','1');insert into user(id,name,sex) values(null,'Trigger','0');insert into user(id,name,sex) values(null,'Dawn','1');



2. 在从库中查询数据,进行验证 :
在从库中,可以查看到刚才创建的数据库:![](https://static001.geekbang.org/infoq/59/59afe96bd5947da4b9e3ad89409aea13.png)
在该数据库中,查询user表中的数据:![](https://static001.geekbang.org/infoq/57/57fc7747014a9eebcb444a7d653f3d41.png)
# 三、MyCat一主一从读写分离## 1.读写分离原理![](https://static001.geekbang.org/infoq/99/998d5238db65d5f8da25c793b116bcaa.png)
读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。
通过MyCat即可轻易实现上述功能,不仅可以支持MySQL,也可以支持`Oracle`和`SQL Server`。
MyCat控制后台数据库的**读写分离**和**负载均衡** 由 **schema.xml文件datahost标签** 的**balance属性**控制。
## 2.读写分离配置配置如下:
1. 检查MySQL的主从复制是否运行正常 .2. 修改MyCat 的`conf/schema.xml` 配置如下:```java<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100"> <table name="user" dataNode="dn1" primaryKey="id"/> </schema> <dataNode name="dn1" dataHost="localhost1" database="db01" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast"> <readHost host="hostS1" url="192.168.192.158:3306" user="root" password="itcast" /> </writeHost> </dataHost> </mycat:schema>
复制代码


  1. 修改conf/server.xml


<user name="root" defaultAccount="true">   <property name="password">123456</property>   <property name="schemas">ITCAST</property> </user> 
<user name="test"> <property name="password">123456</property> <property name="schemas">ITCAST</property> </user>
<user name="user"> <property name="password">123456</property> <property name="schemas">ITCAST</property> <property name="readOnly">true</property> </user>
复制代码


  1. 配置完毕之后, 重启 MyCat 服务;


属性含义说明:


checkSQLschema   当该值设置为true时, 如果我们执行语句"select * from test01.user ;" 语句时, MyCat则会 把schema字符去掉 ,   可以避免后端数据库执行时报错 ; 
balance 负载均衡类型, 目前取值有4种: balance="0" : 不开启读写分离机制 , 所有读操作都发送到当前可用的writeHost上. balance="1" : 全部的readHost 与 stand by writeHost (备用的writeHost) 都参与 select 语句的负载均衡, 简而言之,就是采用双主双从模式(M1 --> S1 , M2 --> S2, 正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。); balance="2" : 所有的读写操作都随机在writeHost , readHost上分发 balance="3" : 所有的读请求随机分发到writeHost对应的readHost上执行, writeHost不负担 读压力 ;balance=3 只在MyCat1.4 之后生效 .
复制代码

3.验证读写分离

修改balance的值, 查询 MyCat 中的逻辑表中的数据变化;

四、MySQL 双主双从搭建

1.架构

一个主机 Master1 用于处理所有写请求,它的从机 Slave1 和另一台主机 Master2 还有它的从机 Slave2 负责所有读请求。当 Master1 主机宕机后,Master2 主机负责写请求,Master1Master2 互为备机。架构图如下:


2.双主双从配置

准备的机器如下:



  1. 双主机配置


Master1 配置:


#主服务器唯一ID server-id=1 
#启用二进制日志 log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个) # binlog-ignore-db=mysql # binlog-ignore-db=information_schema
#设置需要复制的数据库 binlog-do-db=db02 binlog-do-db=db03 binlog-do-db=db04
#设置logbin格式 binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates
复制代码


Master2 配置:


#主服务器唯一ID server-id=3 
#启用二进制日志 log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个) #binlog-ignore-db=mysql #binlog-ignore-db=information_schema
#设置需要复制的数据库 binlog-do-db=db02 binlog-do-db=db03binlog-do-db=db04
#设置logbin格式 binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件 log-slave-updates
复制代码


  1. 双从机配置


Slave1 配置:


#从服务器唯一ID server-id=2 
#启用中继日志 relay-log=mysql-relay
复制代码


Salve2 配置:


#从服务器唯一ID server-id=4 
#启用中继日志 relay-log=mysql-relay
复制代码


  1. 双主机、双从机重启 mysql 服务

  2. 主机从机都关闭防火墙

  3. 在两台主机上建立帐户并授权 slave


#在主机MySQL里执行授权命令 GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%' IDENTIFIED BY 'itcast'; 
flush privileges;
复制代码


查询 Master1 的状态 :



查询 Master2 的状态 :



  1. 在从机上配置需要复制的主机


Slave1 复制 Master1Slave2 复制 Master2


slave1 指令:


CHANGE MASTER TO MASTER_HOST='192.168.192.157', MASTER_USER='itcast', MASTER_PASSWORD='itcast', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
复制代码


slave2 指令:


CHANGE MASTER TO MASTER_HOST='192.168.192.159', MASTER_USER='itcast', MASTER_PASSWORD='itcast', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
复制代码


  1. 启动两台从服务器复制功能 , 查看主从复制的运行状态


start slave; 
show slave status\G;
复制代码




  1. 两个主机互相复制


Master2 复制 Master1Master1 复制 Master2


Master1 执行指令:


CHANGE MASTER TO MASTER_HOST='192.168.192.159', MASTER_USER='itcast', MASTER_PASSWORD='itcast', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
复制代码


Master2 执行指令:


CHANGE MASTER TO MASTER_HOST='192.168.192.157', MASTER_USER='itcast', MASTER_PASSWORD='itcast', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
复制代码


  1. 启动两台主服务器复制功能 , 查看主从复制的运行状态


start slave; 
show slave status\G;
复制代码




  1. 验证


create database db03; 

use db03;
create table user( id int(11) not null auto_increment, name varchar(50) not null, sex varchar(1), primary key (id) )engine=innodb default charset=utf8;
insert into user(id,name,sex) values(null,'Tom','1'); insert into user(id,name,sex) values(null,'Trigger','0'); insert into user(id,name,sex) values(null,'Dawn','1');
insert into user(id,name,sex) values(null,'Jack Ma','1'); insert into user(id,name,sex) values(null,'Coco','0'); insert into user(id,name,sex) values(null,'Jerry','1');
复制代码


在 Master1 上创建数据库:



在 Master1 上创建表 :



  1. 停止从服务复制功能


stop slave;

### 最后
由于文案过于长,在此就不一一介绍了,**这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存**等等知识详解。
![image](https://static001.geekbang.org/infoq/6b/6bbc87199ab4750a70253f117425641a.png)
本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,**其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。****[有需要的朋友可以点击这里免费获取](https://gitee.com/vip204888/java-p7)**
![image](https://static001.geekbang.org/infoq/64/6498e70ae8198a4bda7ea04c4cd4e2bd.png)
![image](https://static001.geekbang.org/infoq/55/55a8ed639e7911e8619e097003baa4a2.png)
复制代码


用户头像

VX:vip204888 领取资料 2021.07.29 加入

还未添加个人简介

评论

发布
暂无评论
GitHub标星过万!10592字,475行