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

news2024/9/22 11:31:26

 

目录

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所在服务器对应的ip

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 数据类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt自定义控件之动画文本

文章目录 前言一、动画文本的效果二、具体实现定义动画对象设置动画时长的实现设置text函数实现绘制代码设置字体函数 三、高级部分操作代码总结 前言 在 Qt 中&#xff0c;自定义控件可以让我们实现丰富的用户界面效果和交互体验。其中&#xff0c;动画文本是一种常见的效果&…

电路分析基础学习(上)第4章

李瀚荪版电分第二版 ----------------------------------------------------------------------------------------------------------------------------- 求单口网络的VCR 两大基本方法&#xff1a; 1.外接电流源求电压&#xff1b; 2.外接电压源求电流&#xff1b; ---…

Netty序列化算法参数调优

目录 一、扩展序列化算法 1、Java 2、Json 二、参数调优 1、CONNECT_TIMEOUT_MILLIS 2、SO_BACKLOG 3、ulimit-n 4、TCP_NODELAY 5、SO_SNDBUF & SO_RCVBUF 6、ALLOCATOR 7、RCVBUF_ALLOCATOR 一、扩展序列化算法 1、Java 我们先写Java中jdk的序列方式&#x…

RabbitMQ系列(28)--RabbitMQ使用Federation Queue(联邦队列)解决异地访问延迟问题

前言&#xff1a; 联邦队列可以在多个Broker节点(或者集群)之间为单个队列提供均衡负载的功能。一个联邦队列可以连接一个或者多个上游队列(upstream queue)&#xff0c;并从这些上游队列中获取消息以满足本地消费者消费消息的需求。 1、Federation Queue工作原理图 2、添加策…

Oracle19c默认用户名system密码不正确不能登录问题解决

Oracle19c默认用户名system密码不正确不能登录问题解决 1、oracle 命令乱码问题 oracle乱码问题一般是由于oracle字符集设置和操作系统字符集设置不一致造成的。 查看oracle字符集方式如下&#xff1a; 1.进入sqlplus 命令&#xff1a; sqlplus /nolog2.以系统管理员身份连…

【Git原理与使用】-- 企业级开发模型

目录 引入 系统开发环境 Git 分支设计规范 master 分支 release 分支 develop 分支 feature 分支 hotfix 分支 开发场景 - 基于git flow模型的实践 DevOps研发平台 修复测试环境 Bug 修改预发布环境 Bug 修改正式环境 Bug 紧急修复正式环境 Bug 拓展实践 都说&a…

java的RSA加密解密示例

RSA算法是一种非对称加密算法&#xff0c;公钥和私钥都可以用于加密和解密操作。在RSA算法中&#xff0c;公钥用于加密数据&#xff0c;私钥用于解密数据。 具体来说&#xff0c;使用公钥加密的数据只能使用相应的私钥进行解密。而使用私钥加密的数据则可以使用相应的公钥进行…

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客&#xff0c;我们将探索云计算的基础知识&#xff0c;以帮助您深入了解这个迅速发展的领域。在前一篇博客中&#xff0c;我们介绍了云原生的概念和重要性&#xff0c;强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…

基于单片机智能水杯 保温杯 定时提醒喝水 温度控制的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前水温&#xff0c;定时提醒&#xff0c;水量变化DS18B20检测当前水体温度&#xff1b;水位传感器检测当前水位&#xff1b;继电器驱动加热片进行水温加热&#xff1b;定时提醒喝水&#xff0c;蜂鸣器报警&#x…

Vue + Volo.Abp 实现OAuth2.0客户端授权模式认证

文章目录 注册ClientOAuth2.0授权创建vue-oidc-client创建OAuth2.0认证跳转获取令牌创建回调页面创建退出登录 最终效果 Volo.Abp的 身份服务器模块默认使用 IdentityServer4实现身份认证。 IdentityServer4是一个开源的OpenID Connect和OAuth 2.0框架&#xff0c;它实现了这…

第41节:cesium 闪烁效果-熊出没(含源码+视频)

结果示例: 点的闪烁:1.逐渐放大后消失;2.点闪烁。 图的闪烁:熊出没,含自定义显示文字效果。 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false">

在当今这个信息时代,互联网中的隐私越来越重要,究竟是隐私换便利还是花钱护隐私呢?

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 网上注册内容时不要填写个人私密信息&#xff1a;互联网时代用户数和用户信息量已然和企业的盈利关联了起来&#xff0c;企业希望尽可能多地获取用户信息。但是很多企业在数据保护上所做的工作存在缺…

java.lang.IllegalArgumentException: Not a managed type

说在前面 真的哭死&#xff0c;全网所有报错都试过&#xff0c;都不是我的问题。解决之后太舒服了&#xff01; 第一个报错 首先&#xff0c;报错没有 TableGenerators 这个类&#xff0c;去 Jar 包看了一下还真没有。 这个类在 Javax 包的 2.2 版本有&#xff0c;添加如下…

Linux 网络延迟排查方法详解

概要 在 Linux 服务器中&#xff0c;可以通过内核调优、DPDK 以及 XDP 等多种方式提高服务器的抗攻击能力&#xff0c;降低 DDoS 对正常服务的影响。在应用程序中&#xff0c;可以使用各级缓存、WAF、CDN 等来缓解 DDoS 对应用程序的影响。 但是需要注意的是&#xff0c;如果 …

easyexcel 自定义列的导出

公司最近有个需求 就是将day这一列 变为excel表格表头&#xff0c;然后列显示薪水。 然后再到网上找教程最终终于找到相关的大神写的博客&#xff0c;具体网址忘记了。抱歉。现在写下具体教程。 ExcelHead 代码 import lombok.Data;/*** author hunterhou* date 2023/2/28 10:…

[分块][STL][树]【Centroids】不一样的解法

前言 一道好题&#xff0c;也就花了我一个下午而已。 本人做法比较清奇&#xff0c;可以当做开阔思路参考&#xff0c;并不太建议实操&#xff08;太难调了&#xff01;&#xff09;。 文章较啰嗦&#xff0c;谅解。 思路 众所周知&#xff0c;我并不太喜推式子&#xff0…

37.RocketMQ之Broker消息存储源码分析

highlight: arduino-light 消息存储文件 rocketMQ的消息持久化在我们在搭建集群时都特意指定的文件存储路径,进入指定的store目录下就可以看到。 下面介绍各文件含义 CommitLog 存储消息的元数据。produce发出的所有消息都会顺序存入到CommitLog文件当中。 CommitLog由多个文件…

javassist implements interface 模拟mybatis 生成代理类

动态创建代理对象的工具类 package com.wsd.util;import org.apache.ibatis.javassist.ClassPool; import org.apache.ibatis.javassist.CtClass; import org.apache.ibatis.javassist.CtMethod; import org.apache.ibatis.session.SqlSession;import java.lang.reflect.Const…

[工业互联-14]:机器人操作系统ROS与ROS2是如何提升实时性的?

目录 第1章 简介 第2章 历史 第3章 特点 &#xff08;1&#xff09;点对点设计 &#xff08;2&#xff09;不依赖编程语言 &#xff08;3&#xff09;精简与集成 &#xff08;4&#xff09;便于测试 &#xff08;5&#xff09;开源 &#xff08;6&#xff09;强大的库及…

ESP32连接云服务器【WebSocket】

ESP32连接云服务器【ESP32宝塔面板】 文章目录 ESP32连接云服务器【ESP32宝塔面板】&#x1f468;‍&#x1f3eb;内容1&#xff1a;背景&#x1f468;‍⚖️内容2&#xff1a;服务器配置&#x1f468;‍&#x1f4bb;内容3&#xff1a;ESP32配置 &#x1f468;‍&#x1f3eb;…