当前位置: 首页 > news >正文

15.MyCat数据库分片

        MyCat 是一个开源的数据库中间件,主要用于将数据库操作请求路由和分发到后端的多个数据库节点。

1.Mycat环境搭建

        在两个不同数据库中创建相同表 

        下载mycat

https://github.com/MyCATApache/Mycat-Servericon-default.png?t=N7T8https://github.com/MyCATApache/Mycat-Server        将下载好的mycat上传到linux中并解压,进入conf目录打开server.xml文件配置账号与密码

        打开schema.xml文件配置        

        配置虚拟表

image-20220602114923879

        配置节点

image-20220602115057601

        配置每个节点的mysql

image-20220602115228187

        进入bin目录,启动mycat并查看运行情况

./mycat start

ps -ef|grep myca

        开放mycat的8066端口

firewall-cmd --zone=public --add-port=8066/tcp --permanent

systemctl restart firewalld.servic

        用工具连接三个数据库, 添加数据就会发现id每五百万的各放在一张表,这是由mycat的schema.xml文件中配置的方法决定的

2.Mycat读写分离

        注意:mysql主从最好版本一致,否则会导致从机设置失败(即使设置了server-id)

Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

2.1 mysql的主从分离

        数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。Insert SQL就是几十个毫秒,Select SQL则要几秒到几分钟才能有结果,很多复杂的SQL,其消耗服务器CPU的能力超强,不亚于死循环的威力。高峰时段的一些复杂SQL查询就导致数据库服务器CPU爆表,系统陷入瘫痪,严重情况下可能导致数据库崩溃。我们应该尽量避免没有主从复制机制的单节点数据库。

        对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置。

2.2 MySQL主从复制的原理

1.主库上记录二进制日志(稍后介绍如何设置)。在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中,MySQL会按事务提交的顺序而非每条语句的执行顺序来记录二进制日志。

2.备库将主库的二进制日志复制到其本地的中继日志中,备库会启动一个工作线程,称为IO线程,I/O线程跟主库建立一个普通的客户端连接,然后在主库上启动一个特殊的二进制转储(binhg dump、线程该线程没有对应的SQL命令),这个二进制转储线程会读取主库上二进制日志中的事件

3.备库的SQL线程执行最后一步,该线程从中继日志中读取事件并在备库执行,从而实现备库数据的更新主从复制是mysql来实现,mycat配合mysql的主从来完成功能。

2.3 MySQL的主从复制

mysql的主从复制完成后,接下来就引入mycat,采用标准的MySQL主从复制高可用性配置并交付给Mycat来完成后端MySQL节点的主从自动切换。

image-20220601172749851

工作流程为:

1.MySQL节点开启主从复制的配置方案,并将主节点配置为Mycat的dataHost里的writeNode,从节点配置为readNode.

2.Mycat内部定期对一个dataHost里的所有writeHost与readHost节点发起心跳检测,正常情况下,Mycat会将第一个writeHost作为写节点,所有的DML SQL会发送给此节点,将readHost作为读节点。

3.当一个dataHost里面配置了两个或多个writeHost的情况下,如果第一个writeHost宕机,则Mycat会在默认的3次心跳检查失败后,自动切换到下一个可用的writeHost执行DML SQL语句。

4.dataNodeHeartbeatPeriod=10000节点心跳检测的频率为10s一次。mycat默认会往数据库发生select users()

2.3.1 mysql主从复制操作步骤

1、主机操作

1.1、修改主机MySQL的/etc/my.cnf文件,特别注意的是my.cnf是MySQL数据库的主配置文件,这个路径是我安装MySQL时指定的主配置文件

<span style="background-color:#f8f8f8"><span style="color:#333333">#主机配置,同步db1中的数据,不同步mysql自带的数据库
binlog-do-db=db1
binlog-ignore-db=mysql
#启用日志
log-bin=mysql-bin
#服务器唯一ID,所有MySQL的id不能一致
server-id=<span style="color:#116644">1</span></span></span>

image-20220601172844554

1.2、重启mysql

service mysqld restart

1.3、登录MySQL创建从机用于连接主机的账户并授权

mysql -u root -p

grant file on . to 'tiger'@'%' identified by '123456';

创建一个用户并指定该用户可以操作主机上的所有文件(.),可以在任何ip(@'%')的设备上通过tiger账号登录主机

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON . TO 'tiger'@'%' IDENTIFIED BY "123456";

指定从机可以通过tiger用户登录主机,对文件进行读写操作

一般不用root帐号,“%”表示所有客户端都可能连,只要帐号、密码正确。此处可用具体客户端IP代替,如10.211.55.5加强安全。

1.4、刷新权限 让上一步的授权操作生效 一定要做

FLUSH PRIVILEGES;

1.5、查看当前MySQL上有哪些用户

select user,host from mysql.user;

image-20220601172907069

1.6、查看master状态

show master status;

image-20220601172918851

File:记录成功事务的日志文件名

position:日志文件中的偏移量,用来记录还未同步内容的位置,避免重复同步已经同步过的数据

2、从MySQL配置

2.1、创建与主机中相同名称的数据库、表 db1

2.2、修改从MySQL的my.cnf文件,指定server-id,并重启从机

(docker安装的MySQL配置文件为:cd)

image-20220601172936491

2.3、登录从服务器mysql,执行以下命令配置从服务器 slaveof host port

docker exec -it mysql bash

mysql -u root -p

change master to master_host='192.168.137.129',master_port=3306,master_user='tiger',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=474; 

如果此处报 should stop slave,是因为之前设置过主从结构,还在生效的状态,应该先停止此状态然后再输入以上指令

image-20220601172953341

注意语句中间不要断开,masteruser为执行同步操作的数据库账户,“992”无单引号(此处的449就是show master status中看到的position的值,这里的mysql-bin.000002就是file对应的值)。

2.4、重启从机mysql

exit退出mysql

exit退出docker

service mysqld restart

2.5、登录到从机中,输入以下指令启动从服务器复制功能

docker exec -it mysql bash

mysql -u root -p

start slave;

2.6、检查从服务器复制功能状态

show slave status \G;

image-20220602114725404

如果“Slave_IO_Running”为NO,很有可能是因为两个数据库的UUID完全一样造成的,解决方法:

  • 在从机上切换到root用户并切换当前工作路径为系统根目录

    cd /

  • 输入以下指令查找数据库UUID所在文件

    find -name auto.cnf

image-20220601173029691

  • 打开查找到的文件,修改id

image-20220601173044875

  • 重启从机

2.7、向主机中对应数据库的对应表插入一条数据,然后到从机对应表中查询看是否有相同的数据

相关文章:

15.MyCat数据库分片

MyCat 是一个开源的数据库中间件&#xff0c;主要用于将数据库操作请求路由和分发到后端的多个数据库节点。 1.Mycat环境搭建 在两个不同数据库中创建相同表 下载mycat https://github.com/MyCATApache/Mycat-Serverhttps://github.com/MyCATApache/Mycat-Server 将下…...

【Python】PySpark

前言 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据…...

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境

pycharm 打开Terminal时报错activate.ps1&#xff0c;因为在此系统上禁止运行脚本&#xff0c;并因此无法进入虚拟环境 如下图所示&#xff1a; 网上说可以set_restrictFalse什么的&#xff0c;虽然也可但可能会降低电脑安全性&#xff0c;可以将下面的终端改为cmd.exe即可...

[C++][C#]yolox TensorRT C++ C#部署

YOLOX是一种新型的高性能探测器&#xff0c;由开发者Zheng Ge、Songtao Liu、Feng Wang、Zeming Li和Jian Sun在《YOLOX: Exceeding YOLO Series in 2021》首次提出。与YOLOV5和YOLOV8相比&#xff0c;YOLOX具有更高的性能和更好的平衡&#xff0c;在速度和精度方面都表现出优越…...

根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)

目录 一、网络通讯协议设计 1.1、交互模型 1.2、自定义应用层协议 1.2.1、请求和响应格式约定 ​编辑 1.2.2、参数说明 1.2.3、具体例子 1.2.4、特殊栗子 1.3、实现 BrokerServer 1.3.1、属性和构造 1.3.2、启动 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、处…...

MongoDB入门

简介 MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库 是NoSQL数据库产品中的一种&#xff0c;是最像关系型数据库&#xff08;MySQL&#xff09;的非关系型数据库 内部采用BSON(二进制JSON)格式来存储数据,并支持水平扩展。 MongoDB本身并不是完全免费的,它对于…...

vr智慧党建主题展厅赋予企业数字化内涵

现如今&#xff0c;VR全景技术的发展让我们动动手指就能在线上参观博物馆、纪念馆&#xff0c;不仅不用受时间和空间的限制&#xff0c;还能拥有身临其境般的体验&#xff0c;使得我们足不出户就能随时随地学习、传承红色文化。 很多党建展厅都是比较传统的&#xff0c;没有运用…...

go中mutex的sema信号量是什么?

先看下go的sync.mutex是什么 type Mutex struct {state int32sema uint32 } 这里面有个sema&#xff0c;这个就是信号量。 什么是信号量&#xff1f; 什么是信号量&#xff1f;_kina100的博客-CSDN博客 其实通俗的来说&#xff0c;信号量就是信号灯&#xff0c;但是他不是…...

LeetCode笔记:Weekly Contest 360

LeetCode笔记&#xff1a;Weekly Contest 360 0. 吐槽1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-360/ 0.…...

【树DP】2021ICPC南京 H

Problem - H - Codeforces 题意&#xff1a; 思路&#xff1a; 这题应该算是铜牌题 铜牌题 简单算法 基础思维 简单复盘一下思路 首先&#xff0c;我们发现有个很特殊的条件&#xff1a; ti < 3 然后看一下样例&#xff1a; 注意到&#xff0c;对于一个结点 u &#…...

Leedcode19. 删除链表的倒数第 N 个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1…...

Mysql-索引查询相关

一、单表查询 1.1 二级索引为null 不论是普通的二级索引&#xff0c;还是唯一二级索引&#xff0c;它们的索引列对包含 NULL 值的数量并不限制&#xff0c;所以我们采用key IS NULL 这种形式的搜索条件最多只能使用 ref 的访问方法&#xff0c;而不是 const 的访问方法 1.2 c…...

C++ Pimpl

Pimpl(Pointer to implementation&#xff0c;指向实现的指针) 是一种减少代码依赖和编译时间的C编程技巧&#xff0c;其基本思想是将一个外部可见类(visible class)的实现细节&#xff08;一般是所有私有的非虚成员&#xff09;放在一个单独的实现类(implementation class)中&…...

rust学习-类型转换

基本类型转换 // 不显示类型转换产生的溢出警告。 #![allow(overflowing_literals)]fn main() {let decimal 65.4321_f32;// 错误&#xff01;不提供隐式转换// let integer: u8 decimal;// 可以显式转换let integer decimal as u8;let character integer as char;println…...

算法通过村第四关-栈青铜笔记|手写栈操作

文章目录 前言1. 栈的基础概要1.1 栈的特征1.2 栈的操作1.3 Java中的栈 2. 栈的实现&#xff08;手写栈&#xff09;2.1 基于数组实现2.2 基于链表实现2.3 基于LinkedList实现 总结 前言 提示&#xff1a;我自己一个人的感觉很好 我并不想要拥有你 除非你比我的独处更加宜人 --…...

Python计算加速利器

迷途小书童的 Note 读完需要 6分钟 速读仅需 2 分钟 1 简介 Python 是一门应用非常广泛的高级语言&#xff0c;但是&#xff0c;长久以来&#xff0c;Python的运行速度一直被人诟病&#xff0c;相比 c/c、java、c#、javascript 等一众高级编程语言&#xff0c;完全没有优势。 那…...

PyTorch 深度学习实践 第10讲刘二大人

总结&#xff1a; 1.输入通道个数 等于 卷积核通道个数 2.卷积核个数 等于 输出通道个数 1.单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c…...

Linux特殊指令

目录 1.dd命令 2.mkfs格式化 3.df命令 4.mount实现硬盘的挂载 5.unshare 1.dd命令 dd命令可以用来读取转换并输出数据。 示例一&#xff1a; if表示infile&#xff0c;of表示outfile。这里的/dev/zero是一个特殊文件&#xff0c;会不断产生空白数据。 bs表示复制一块的大…...

MPI之主从模式的一般编程示例

比如&#xff0c;我们可以选举0号进程为master进程&#xff0c;其余进程为slaver进程 #include "mpi.h" #include <unistd.h> #include <iostream>int main(int argc, char *argv[]) {int err MPI_Init(&argc,&argv);int rank,size;MPI_Comm_r…...

基于野狗算法优化的BP神经网络(预测应用) - 附代码

基于野狗算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于野狗算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.野狗优化BP神经网络2.1 BP神经网络参数设置2.2 野狗算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...