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

Mysql 的分布式策略

在这里插入图片描述

1. 前言

MySQL 作为最最常用的数据库,了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。

它同时也是面试中最最常问的考点,我们这里就简单总结下 Mysq 的常用分布式策略。

2. 复制

复制主要有主主复制和主从复制两种

mysql 的复制功能都是基于 bin-log 实现的

2.1. 经典主从复制

这里使用 docker 实验,生产环境尽量不要使用 docker
我这里使用默认网络,即网桥模式测试就足够了

准备主从复制 my.cnf

mkdir /volume1/docker/mysql-master
mkdir /volume1/docker/mysql-master/data
mkdir /volume1/docker/mysql-slave
mkdir /volume1/docker/mysql-slave/data
# /volume1/docker/mysql-master/my.cnf 主mysql配置
[mysqld]
server-id=1
log-bin=mysql-bin
# /volume1/docker/mysql-slave/my.cnf 从mysql配置
[mysqld]
server-id=2
log-bin=mysql-bin
  1. 搭建主从MySQL
# volume1/docker/mysql-master 是你的数据存储卷
# 这里密码设置为123456
docker run -d \
--name mysql-master \
-v /volume1/docker/mysql-master/data:/var/lib/mysql \
-v /volume1/docker/mysql-master/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.11docker run -d \
--name mysql-slave \
-v /volume1/docker/mysql-slave/data:/var/lib/mysql \
-v /volume1/docker/mysql-slave/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.11
  1. 主 MySQL 配置
docker exec -it mysql-master /bin/bash
mysql -u root -p
SHOW MASTER STATUS;

在这里插入图片描述
在这里插入图片描述

然后创建同步用户

CREATE USER 'repluser'@'%' IDENTIFIED WITH mysql_native_password BY 'replpassword';
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';
FLUSH PRIVILEGES;

在这里插入图片描述

  1. 获取主Mysql ip
docker inspct mysql-master

在这里插入图片描述
我这里看到的是172.17.0.5

  1. 配置从 MySQL

这里主要是配置主 Mysql 的账号密码,主服务器的偏移量和 bin 位置

docker exec -it mysql-slave /bin/bash
mysql -u root -pCHANGE MASTER TO
MASTER_HOST='172.17.0.5',
MASTER_USER='repluser',
MASTER_PASSWORD='replpassword',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=852;START SLAVE;
  1. 查询链接状态

这里主要看有没有报错,没报错就可以了

SHOW SLAVE STATUS\G;


5. 测试同步

我们首先在master mysql 随便创建一个test数据库
在这里插入图片描述
然后我们发现在从数据库。就可以发现 test 数据库了。
在这里插入图片描述

2.2. 主主复制

主主同步相对来说使用少一点,因为保证一致性更加困难,增加了维护成本

前提条件

  1. 安装两个MySQL实例,并确保它们可以相互连接。
  2. 每个MySQL实例有一个唯一的server-id
  3. 启用二进制日志(binlog)。

步骤

配置第一台服务器(Server A)
  1. 编辑配置文件 my.cnf
 [mysqld] server-id=1 log-bin=mysql-binbinlog-do-db=your_database # 需要复制的数据库`
  1. 重启MySQL服务
  service mysql restart
  1. 创建复制用户
  CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replpassword'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
  1. 获取二进制日志文件名和位置
  SHOW MASTER STATUS;

记录下FilePosition,如mysql-bin.000001154

配置第二台服务器(Server B)
  1. 编辑配置文件 my.cnf
  [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=your_database# 需要复制的数据库
  1. 重启MySQL服务
  service mysql restart
  1. 创建复制用户
  CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replpassword'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
  1. 获取二进制日志文件名和位置
  SHOW MASTER STATUS;

记录下FilePosition,如mysql-bin.000001154

配置双向复制
  1. 在第一台服务器(Server A)上配置从服务器(Server B)

sql

  CHANGE MASTER TO MASTER_HOST='ServerB_IP', MASTER_USER='repl', MASTER_PASSWORD='replpassword', MASTER_LOG_FILE='mysql-bin.000001', -- Server B的binlog文件名 MASTER_LOG_POS=154; -- Server B的binlog位置 START SLAVE;
  1. 在第二台服务器(Server B)上配置从服务器(Server A)
 CHANGE MASTER TO MASTER_HOST='ServerA_IP', MASTER_USER='repl', MASTER_PASSWORD='replpassword', MASTER_LOG_FILE='mysql-bin.000001', -- Server A的binlog文件名 MASTER_LOG_POS=154; -- Server A的binlog位置 START SLAVE;

验证配置

  1. 在第一台服务器(Server A)上检查复制状态

sql

复制代码

SHOW SLAVE STATUS\G;

  1. 在第二台服务器(Server B)上检查复制状态
  `SHOW SLAVE STATUS\G;`

确保Slave_IO_RunningSlave_SQL_Running均为Yes,并且Last_IO_Error为空。

整体思路和主从一直,不过要互相复制,且容易出现问题,未还难度大

3. 其他方案

如MySQL InnoDB Cluster,MySQL InnoDB Cluster,Keepalived 和 MHA,Galera
Cluster 很多分布式方案。

3.1. innoDB Cluster

MySQL InnoDB Cluster 是一个官方提供的高可用性和可扩展性解决方案,基于MySQL组复制(Group Replication)、MySQL Shell和MySQL Router。

优点:
高可用性和自动故障切换。
易于配置和管理,官方支持。
读写分离和负载均衡。

3.2. ProxySQL

使用场景:读写分离、负载均衡、高可用性。
优点:高性能代理,支持动态配置和多个后端数据库。
缺点:需要额外的代理层,配置复杂。

3.3. Galera Cluster

使用场景:多主同步复制、高可用性。
优点:数据同步、强一致性、高可用性。
缺点:网络要求高,延迟敏感。

3.4. Sharding(分片)

使用场景:大规模数据处理和存储,水平扩展。
优点:没有单点瓶颈,扩展性好。
缺点:应用层处理复杂,跨分片查询困难。

3.5 NDB Cluster

使用场景:高性能、高可用性、高可扩展性。
优点:数据分片、负载均衡、高可用性。
缺点:配置复杂,硬件要求高。

相关文章:

Mysql 的分布式策略

1. 前言 MySQL 作为最最常用的数据库,了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。 它同时也是面试中最最常问的考点,我们这里就简单总结下 Mysq 的常用分布式策略。 2. 复制 复制主要有主主复制和…...

记录一个利用winhex进行图片隐写分离的

前提 是一次大比武里面的题目,属实给我开了眼,跟我之前掌握的关于隐写合并的操作都不一样。 它不是直接在文件里面进行输入文件隐写,叫你输入密码,或者更改颜色,或者偏移位置; 它不是单纯几个文件合并&a…...

压缩映射定理证明

收缩映射定理(又称Banach不动点定理)是一个重要的结果,特别是在分析和应用数学中。 定理(收缩映射定理):假设是一个从度量空间 (X,d) 到自身的函数,如果 是一个收缩映射,即存在常数 …...

Ubuntu20.04.6操作系统安装教程

一、VMware Workstation16安装 选择安装VMware Workstation,登录其官网下载安装包,链接如下: 下载 VMware Workstation Pro 下载后运行安装向导,一直Next即可。 二、Ubuntu镜像下载 ubuntu20.04 选择需要下载的镜像类型下载即…...

(分治算法3)leecode 53 最大子数组和(最大子段和)

题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 分治解法 这个问题可以分成从左半边数组找最大子段和从右半部分找最大子段和…...

【C++】模板初级

【C】模板初级 泛型编程函数模板函数模板的概念函数模板格式函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板格式类模板的实例化 泛型编程 当我们之前了解过函数重载后可以知道,一个程序可以出现同名函数,但参数类型不同。 //整型 voi…...

eslint 使用单引号,Prettier使用双引号冲突

当 ESLint 规则要求使用单引号 (quotes: single) 而 Prettier 默认使用双引号时,会发生配置冲突。为了解决这个问题,你需要统一这两个工具的配置,确保它们遵循相同的规则。这里推荐两种解决方案: 解决方案 1: 修改 ESLint 配置以…...

进化生物学的数学原理 知识点总结

1、进化论与自然选择 1.1 进化论 1、进化论 过度繁殖 -> 生存竞争 -> 遗传和变异 -> 适者生存 2、用进废退学说与自然选择理论 用进废退:一步适应:变异 适应 自然选择:两步适应:变异 选择 适应 3、木村资生的中性…...

如何挑到高质量的静态IP代理?

在数字化时代,静态住宅IP代理已成为网络活动中不可或缺的一部分。无论是数据采集、网站访问,还是其他需要隐藏真实IP地址的在线活动,高质量的静态住宅IP代理都发挥着至关重要的作用。今天IPIDEA代理IP将详细介绍如何获取高质量的静态住宅IP代…...

vagrant putty错误的解决

使用Vagrant projects for Oracle products and other examples 新创建的虚机,例如vagrant-projects/OracleLinux/8。 用vagrant ssh可以登录: $ vagrant ssh > vagrant: Getting Proxy Configuration from Host...Welcome to Oracle Linux Server …...

图像分割——U-Net论文介绍+代码(PyTorch)

0、概要 原理大致介绍了一下,后续会不断精进改的更加详细,然后就是代码可以对自己的数据集进行一个训练,还会不断完善,相应其他代码可以私信我。 一、论文内容总结 摘要:人们普遍认为,深度网络成功需要数…...

C#进阶-ASP.NET的WebService跨域CORS问题解决方案

在现代的Web应用程序开发中,跨域资源共享(Cross-Origin Resource Sharing, CORS)问题是开发者经常遇到的一个挑战。特别是当前端和后端服务部署在不同的域名或端口时,CORS问题就会显得尤为突出。在这篇博客中,我们将深…...

如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理

在如今社交媒体的盛行下,TikTok已成为全球范围内最受欢迎的短视频平台之一。对于那些希望提高效率的内容创作者而言,手动发布和管理多个TikTok账号可能会是一项繁琐且耗时的任务。幸运的是,通过利用TikTok矩阵源码,我们可以实现自…...

Java高级编程技术详解:从多线程到算法优化的全面指南

复杂度与优化 复杂度与优化在算法中的应用 算法复杂度是衡量算法效率的重要指标。了解和优化算法复杂度对提升程序性能非常关键。本文将介绍时间复杂度和空间复杂度的基本概念,并探讨一些优化技术。 时间复杂度和空间复杂度 时间复杂度表示算法执行所需时间随输…...

Redis 分布式锁过期了,还没处理完怎么办?

为了防止死锁,我们会给分布式锁加一个过期时间,但是万一这个时间到了,我们业务逻辑还没处理完,怎么办? 这是一个分布式应用里很常见到的需求,关于这个问题,有经验的程序员会怎么处理呢&#xff…...

Vue2+Element-ui后台系统常用js方法

el-dialog弹框关闭清空form表单并清空验证 cancelDialog(diaLog, formRef) {this[diaLog] falseif (formRef) {this.$refs[formRef].resetFields()} }页面使用&#xff1a; <el-dialog :visible.sync"addSubsidyDialog.dialog" close"cancelDialog(addSub…...

Kafka高频面试题整理

文章目录 1、什么是Kafka?2、kafka基本概念3、工作流程4、Kafka的数据模型与消息存储机制1)索引文件2)数据文件 5、ACKS 机制6、生产者重试机制:7、kafka是pull还是push8、kafka高性能高吞吐的原因1&#xff09;磁盘顺序读写&#xff1a;保证了消息的堆积2&#xff09;零拷贝机…...

uniapp地图自定义文字和图标

这是我的结构&#xff1a; <map classmap id"map" :latitude"latitude" :longitude"longitude" markertap"handleMarkerClick" :show-location"true" :markers"covers" /> 记住别忘了在data中定义变量…...

k8s_探针专题

关于探针 生产环境中一定要给pod设置探针&#xff0c;不然pod内的应用发生异常时&#xff0c;K8s将不会重启pod。 需要遵循以下几个原则&#xff08;本人自己总结&#xff0c;仅供参考&#xff09;&#xff1a; 探针尽量简单&#xff0c;不要消耗过多资源。因为探针较为频繁的…...

MySQL触发器基本结构

1、修改分隔符符号 delimiter $$ 可以修改成$$ //都行 2、创建触发器函数名称 create trigger 函数名 3、什么样的操作出发&#xff0c;操作那个表 after&#xff1a;......之后触发 befor&#xff1a;......之前触发 insert&#xff1a;插入被触发 update&#xff1a;修改被触…...

前缀和(一维前缀和+二维前缀和)

前缀和 定义&#xff1a; 前缀和是指某序列的前n项和&#xff0c;可以把它理解为数学上的数列的前n项和&#xff0c;而差分可以看成前缀和的逆运算。合理的使用前缀和与差分&#xff0c;可以将某些复杂的问题简单化。 用途&#xff1a; 前缀和一般用于统计一个区间的和&…...

web前端五行属性:深入探索与实战解析

web前端五行属性&#xff1a;深入探索与实战解析 在Web前端开发中&#xff0c;五行属性这一概念或许听起来有些陌生。然而&#xff0c;如果我们将其与前端开发的核心理念相结合&#xff0c;就能发现其中蕴含的深刻内涵。本文将从四个方面、五个方面、六个方面和七个方面&#…...

白酒:茅台镇白酒的酒厂社会责任与可持续发展

云仓酒庄豪迈白酒&#xff0c;作为茅台镇的品牌&#xff0c;不仅在产品品质和口感方面有着卓着的表现&#xff0c;在酒厂社会责任和可持续发展方面也做出了积极的探索和实践。 首先&#xff0c;云仓酒庄豪迈白酒注重环境保护和资源利用。酒厂在生产过程中严格控制能源消耗和排放…...

音视频开发_SDL音频播放器的实现

今天向大家介绍一下如何通过 SDL 实现一个PCM音频播放器。这是一个最简单的播放器&#xff0c;它不涉及到音频的解复用&#xff0c;解码等工作。我们只需要将音频原始数据喂给 SDL 音频接口就可以听到悦耳的声音了。在下面的列子中我将向你演示&#xff0c;使用 SDL 做这样一个…...

C语言学习系列:初识C语言

前言&#xff0c;C语言是什么 语言&#xff0c;比如中文、英语、法语、德语等&#xff0c;是人与人交流的工具。 C语言也是语言&#xff0c;不过是一种特殊的语言&#xff0c;是人与计算机交流的工具。 为什么叫C语言呢&#xff1f; 这就要从C语言的历史说起了。 一&#…...

利用反向代理编写HTTP抓包工具——可视化界面

手写HTTP抓包工具——可视化界面 项目描述语言golang可视化fynev2功能代理抓包、重发、记录 目录 1. 示例1.1 主界面1.2 开启反向代理1.3 抓包1.4 历史记录1.5 重发 2. 核心代码2.1 GUI2.1 抓包 3. 结语3.1 传送门 1. 示例 1.1 主界面 1.2 开启反向代理 1.3 抓包 1.4 历史记录…...

下拉框数据被遮挡 且 后续数据无法下拉的 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加空白版2.2 调整z-index2.3 父容器的溢出属性2.4 调整样式属性4. 效果图前言 小程序使用的是Uniapp,原理都差不多,索性标题就不标注Uniapp(小程序) 对于该问题调试了一个晚上,最终解决,对此记录下来 1. 问题所示 执…...

课设--学生成绩管理系统(二)

欢迎来到 Papicatch的博客 目录 &#x1f40b;引言 &#x1f988;编写目的 &#x1f988;项目说明 &#x1f40b;产品介绍 &#x1f988;产品概要说明 &#x1f988;产品用户定位 &#x1f988;产品中的角色 &#x1f40b; 产品总体业务流程图 &#x1f40b; 产品功…...

STM32CubeMX配置-外部中断配置

一、简介 MCU为STM32G070&#xff0c;配置为上升沿触发外部中断&#xff0c;在上升沿外部中断回调函数中进行相关操作。 二、外部中断配置 查看规格书中管教描述&#xff0c;找到I/O对应的外部中断线&#xff0c;然后进行如下上升沿触发外部中断配置。 三、生成代码 调用上升沿…...

基于Vue的日程排班表 - common-schedule

原文&#xff1a;基于Vue的日程排班表 - common-schedule-CSDN博客...

网站做资讯需要获取许可证吗/抚顺seo

java内部类 内部类不是很好理解&#xff0c;但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成&#xff0c;而内部类相当于其中的某个器官之一&#xff0c;例如心脏&#xff1a;它也有自己的属性和行为&#xff08;血液、跳动&#…...

wordpress静态cdn/关键词搜索排名软件

0: 由于天朝的特殊&#xff0c;在国内很不好编译&#xff08;主要是依赖库下载不了&#xff09;。 所以记录下编译过程 需要的工具: debian 或者其他linux其他版本。 make,git,golang(最好1.11版本以上) 编译过程 export GOPATH/data/tidb mkdir -p /data/tidb/src/githu…...

如何做凡客网站/沈阳seo关键词

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 一、异步执行 实现方式二…...

网站会员收费怎么做/googlechrome

拦截器的实现原理很简单&#xff0c;就是动态代理&#xff0c;实现AOP机制。当外部调用被拦截bean的拦截方法时&#xff0c;可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑&#xff0c;比如特殊权限验证&#xff0c;参数修正等操作。 但是最近在项目中要在一个事务中…...

沈阳网站建设方案模板/许昌网站推广公司

为了让CSR867x的开发更容易&#xff0c;现与思度科技联合推出CSR867x学习板【淘宝链接&#xff1a;思度科技CSR开发板】。 技术交流QQ群号&#xff1a;743434463 开发板会员QQ群号&#xff1a;725398389&#xff08;凭订单号入群&#xff0c;赠PPT、项目源码、视频教程&#x…...

建设中小企业网站/网络营销专业如何

but we cant use it unless you put visual studio in 64bit mode.最近装dlib时候遇到这个问题&#xff0c;很简单就能解决掉 Visual Studio用户通常应该以64位模式执行所有操作。默认情况下&#xff0c;Visual Studio是32位&#xff0c;在其输出和自己的执行中都是如此&…...