Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)

Mycat高级特性_搭建双主双从



环境准备


创建docker容器

#启动第一台
docker run -d -p 3350:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name=master1
mysql:5.7
#启动第二台
docker run -d -p 3360:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name=slave1
mysql:5.7
#启动第三台
docker run -d -p 3370:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name=master2
mysql:5.7
#启动第四台
docker run -d -p 3380:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name=slave2
mysql:5.7


修改容器内MySQL配置文件


1、修改master1配置文件

[mysqld]
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1


2、修改master2配置文件

[mysqld]
#主服务器唯一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配置文件

[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay


4、修改slave2配置文件

[mysqld]
#从服务器唯一ID
server-id=4 #启用中继日志
relay-log=mysql-relay


双主双从重启服务

systemctl restart mysql


配置数据库


1、分别在两个主库中执行创建从库连接账号命令

GRANT replication SLAVE ON *.* TO 'slave' @'%' IDENTIFIED BY '123456';


2、查看两个主库的master状态

show master status;


两个从库连接到主库

change master to
master_host='192.168.66.101',
master_user='slave',
master_port=3350,
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=438;


参数:


master_host:这里的ip就是mysql所在服务器对应的i

master_user:就是在第一步配置的账号

master_port:mysql的端口

master_password:配置的密码

master_log_file:file参数

master_log_pos:Position参数


两个从库启动复制功能

start slave;


查看连接状态

show slave status \G;


两个主库再互相成为对方的从库

# 在master1上执行
CHANGE MASTER TO master_host = '192.168.66.101',
master_user = 'slave',
master_password = '123456',
master_port = 3370,
master_log_file = 'mysql-bin.000001',
master_log_pos = 154;
# 在master2上执行
CHANGE MASTER TO master_host = '192.168.66.101',
master_user = 'slave',
master_password = '123456',
master_port = 3350,
master_log_file = 'mysql-bin.000001',
master_log_pos = 154;


两个主库启动复制功能

start slave;


查看连接状态

show slave status \G;


双主双从配置MyCat

vim schema.xml


<dataNode name="db_node" dataHost="db_host" database="test" />
<dataHost name="db_host" 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.140.128:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.140.127:3306" user="root" password="123456" />
</writeHost>
<writeHost host="hostM2" url="192.168.140.126:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.140.125:3306" user="root" password="123456" />
</writeHost>
</dataHost>


注意:


  • writeType="0":所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二 个riteHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.
  • writeType="1":所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
  • switchType="-1" :表示不自动切换 mysql 实例
  • switchType="1" :默认值,自动切换


Mycat分片技术_垂直拆分-分库



前沿


目前很多互联网系统都存在单表数据量过大的问题,这就降低了查询速度,影响了客户体验。为了提高查询速度,我们可以优化sql语句,优化表结构和索引,不过对那些百万级千万级的数据库表,即 便是优化过后,查询速度还是满足不了要求。


垂直分割


垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张 表。表的记录并不多,但是字段却很长,表占用空间很大,检索表 的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段 拆分到另一个表,并且该表与原表是一对一的关系。


拆分原则:


把不常用的字段单独放在一张表

把text,blob等大字段拆分出来放在附表中

经常组合查询的列放在一张表中


举个例子



拆分思路: 如果我们只想查询id为8的学生的分数:select 分数 from 答题 表 where id = 8;虽然知识查询分数,但是题目和回答这两个大字段也是要被扫描的,很消耗性能。但是我们只关心分数,并 不想查询题目和回答。这就可以使用垂直分割。

 

实现分库


修改schema.xml配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 数据库配置 与server.xml 中的数据库对应 -->
 <schema name="db_test" checkSQLschema="false" dataNode="dn1" sqlMaxLimit="100">
    <table name="customer" dataNode="dn2"/>
 </schema>
   <!-- 两个数据库嘛 hadoop01,2 上都要创建 orders 数据库 -->
 <dataNode name="dn1" dataHost="host1" database="orders" />
 <dataNode name="dn2" dataHost="host2" database="orders" />
    <!-- 两个数据库 肯定两个 dataHost -->
  <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <writeHost host="hostM1" url="192.168.66.101:3350" user="root" password="123456">
 </writeHost>
 </dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0"
dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM2" url="192.168.66.102:3350" user="root" password="123456">
                </writeHost>
        </dataHost>
</mycat:schema>


新增两个空白库


分库操作不是在原来的老数据库上进行操作,需要准备两台机器分别安装新的数据库

#在数据节点 dn1、dn2 上分别创建数据库 orders
CREATE DATABASE orders;


启动Mycat

./mycat console


Mycat进行分库


创建表

mysql> use TESTDB;
# 使用 mycat 创建四个表
create table customer(
 id int auto_increment,
 name varchar(200),
 primary key(id)
);
create table orders(
 id int auto_increment,
 order_type int,
 customer_id int,
 amount decimal(10,2),
  primary key(id)
);
create table orders_detail(
 id int auto_increment,
 order_id int,
 detail varchar(200),
  primary key(id)
);
create table dict_order_type(
 id int auto_increment,
 order_type varchar(200),
  primary key(id)
);


实时学习反馈


1.Mycat技术中垂直拆分主要解决___问题。


A 性能

B 安全

C 兼容

D 并发


2.Mycat技术中不属于垂直拆分原则___。


A 把不常用的字段单独放在一张表

B 大字段拆分出来

C 经常组合查询的列放在一张表中

D 数据类型

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
存储 算法 关系型数据库
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
169 0
|
4月前
|
SQL 算法 Java
(二十六)MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!
前面《MySQL主从原理篇》、《MySQL主从实践篇》两章中聊明白了MySQL主备读写分离、多主多写热备等方案,但如果这些高可用架构依旧无法满足业务规模,或业务增长的需要,此时就需要考虑选用分库分表架构。
2794 4
|
5月前
|
SQL 中间件 关系型数据库
MyCAT数据库中间件的架构与使用方法
MyCAT数据库中间件的架构与使用方法
|
7月前
|
运维 负载均衡 关系型数据库
Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)
156 0
|
存储 中间件 数据处理
05MyCat - 概念 - 数据库中间件
05MyCat - 概念 - 数据库中间件
75 0
|
存储 cobar NoSQL
开源数据库中间件-MyCat初探与分片实践
一个新颖的数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。
232 7
开源数据库中间件-MyCat初探与分片实践
|
关系型数据库 MySQL 中间件
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
138 0
|
关系型数据库 MySQL 分布式数据库
Mycat分布式数据库架构解决方案--Mycat实现读写分离
Mycat分布式数据库架构解决方案--Mycat实现读写分离
215 0
Mycat分布式数据库架构解决方案--Mycat实现读写分离
|
存储 容灾 中间件
Mycat分布式数据库架构解决方案--Mycat的介绍
Mycat分布式数据库架构解决方案--Mycat的介绍
197 0
Mycat分布式数据库架构解决方案--Mycat的介绍
|
存储 关系型数据库 MySQL
MyCat - 分片 - 水平拆分 - 概述及案例场景 | 学习笔记
快速学习 MyCat - 分片 - 水平拆分 - 概述及案例场景
MyCat - 分片 - 水平拆分 - 概述及案例场景 | 学习笔记