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
- 搭建主从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
- 主 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;

- 获取主Mysql ip
docker inspct mysql-master

我这里看到的是172.17.0.5
- 配置从 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;
- 查询链接状态
这里主要看有没有报错,没报错就可以了
SHOW SLAVE STATUS\G;

5. 测试同步
我们首先在master mysql 随便创建一个test数据库

然后我们发现在从数据库。就可以发现 test 数据库了。

2.2. 主主复制
主主同步相对来说使用少一点,因为保证一致性更加困难,增加了维护成本
前提条件
- 安装两个MySQL实例,并确保它们可以相互连接。
- 每个MySQL实例有一个唯一的
server-id。 - 启用二进制日志(binlog)。
步骤
配置第一台服务器(Server A)
- 编辑配置文件
my.cnf:
[mysqld] server-id=1 log-bin=mysql-binbinlog-do-db=your_database # 需要复制的数据库`
- 重启MySQL服务:
service mysql restart
- 创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replpassword'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 获取二进制日志文件名和位置:
SHOW MASTER STATUS;
记录下File和Position,如mysql-bin.000001和154。
配置第二台服务器(Server B)
- 编辑配置文件
my.cnf:
[mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=your_database# 需要复制的数据库
- 重启MySQL服务:
service mysql restart
- 创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replpassword'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 获取二进制日志文件名和位置:
SHOW MASTER STATUS;
记录下File和Position,如mysql-bin.000001和154。
配置双向复制
- 在第一台服务器(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;
- 在第二台服务器(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;
验证配置
- 在第一台服务器(Server A)上检查复制状态:
sql
复制代码
SHOW SLAVE STATUS\G;
- 在第二台服务器(Server B)上检查复制状态:
`SHOW SLAVE STATUS\G;`
确保Slave_IO_Running和Slave_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 分布式锁过期了,还没处理完怎么办?
为了防止死锁,我们会给分布式锁加一个过期时间,但是万一这个时间到了,我们业务逻辑还没处理完,怎么办? 这是一个分布式应用里很常见到的需求,关于这个问题,有经验的程序员会怎么处理呢ÿ…...
Vue2+Element-ui后台系统常用js方法
el-dialog弹框关闭清空form表单并清空验证 cancelDialog(diaLog, formRef) {this[diaLog] falseif (formRef) {this.$refs[formRef].resetFields()} }页面使用: <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)磁盘顺序读写:保证了消息的堆积2)零拷贝机…...
uniapp地图自定义文字和图标
这是我的结构: <map classmap id"map" :latitude"latitude" :longitude"longitude" markertap"handleMarkerClick" :show-location"true" :markers"covers" /> 记住别忘了在data中定义变量…...
k8s_探针专题
关于探针 生产环境中一定要给pod设置探针,不然pod内的应用发生异常时,K8s将不会重启pod。 需要遵循以下几个原则(本人自己总结,仅供参考): 探针尽量简单,不要消耗过多资源。因为探针较为频繁的…...
MySQL触发器基本结构
1、修改分隔符符号 delimiter $$ 可以修改成$$ //都行 2、创建触发器函数名称 create trigger 函数名 3、什么样的操作出发,操作那个表 after:......之后触发 befor:......之前触发 insert:插入被触发 update:修改被触…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
