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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟卖五种常用采集方式,关键词采集升级,更加让新手上手更快!

今天给大家分享一个跟卖选品软件,相信很多卖家都在为选品而苦恼,人工筛选一天也筛选不出几个能用的链接,不仅耗费时间精力,还提升不了选品效率,今天就分享一款实用的选品工具,它能够帮助我们节省选品时间&a…

CD工具awx之通知NOTIFICATIONS,及时发送消息到企业微信机器人

一、背景 awx的模板执行结果及时通知给相关人员,可以直接在awx界面上配置通知,然后由项目和模板来决定是否开启通知。 通知类型一般选择webhook,消息体的拼接,则需要参考awx官方文档。 除了在awx界面上配置通知外,也…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲:单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲:单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲:单片机STC89C52RA8889驱动控制彩屏 代码的压缩(Keil编译器) 第…

读Diffusion models from scratch, from a new theoretical perspective

1 Introduction diffusion model 在多个领域有了突破,这篇文章从优化的角度来介绍diffusion,包括理论和代码。 2 Training diffusion models diffusion 的样本集可以对应图像,音频,视频,机械臂轨迹,甚至…

HTTP 概述

HTTP 概述 HTTP 是一种用于获取资源(如 HTML 文档)的协议。 它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收方(通常是 Web 浏览器)发起。 一个完整的文档是从获取的不同子文…

使用 Azure AI Document Intelligence 创建智能文档处理

简介 借助 Azure AI 文档智能中的预生成模型,无需自行训练模型,即可从常见表单和文档中提取数据。 公司中,表单种类繁多,如发票、收据、调查表等。你可能想知道,从这些文档中提取姓名、地址、金额等信息需要多少工作…

如何将NextJs中的File docx保存到Prisma ORM

背景/引言 在现代 Web 开发中,Next.js 是一个备受欢迎的 React 框架,它具有许多优点,如: 服务器端渲染 (SSR):Next.js 支持服务器端渲染,可以提高页面加载速度,改善 SEO,并提供更好…

Introducing Index-1.9B

简介 大家好,今天我们很高兴首次发布Index系列模型中的轻量版本:Index-1.9B系列 本次开源的Index-1.9B 系列包含以下模型: Index-1.9B base : 基座模型,具有 19亿 非词嵌入参数量,在2.8T 中英文为主的语料上预训练&…

小程序面试题全(offer直接给他拿下)

各位小伙伴们,好久不见,突然想起来微信小程序没有给大家整一份面经,废话不多说,开干! 1.wxml和html有什么区别 ①使用标签不同。 ②wxml提供了和vue.js中模版语法类似的模版语法,而html没有。 ③html在…

期末测试2(1)---PTA

一开始写错了, 因为这个再定义一个和原函数一样类型的进行存储, 然后将第一个设置为最大的,依次用循环比较后面的, 最后输出 但是这个适用于找最大的、字符串这样最后只输出一个最大项比较好 对于结构体不好将比较的这个数所…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程,可以确保数据的一致性,提高数据的可用性和可靠性,同时支持数据分析和决策制定。 大数据同步的步骤通常包括: 数据识别:确定需要同步的数据类型和范围&…

教程:A5000 GPU 上运行阿里最新开源大模型 Qwen2

这是我们新一篇关于大模型的文章,我们此前还讲过如何运行 LLama3 大模型。而这次,我们将使用 Ollama 运行阿里千问Qwen2:7b。要知道 Qwen2 可是目前最热门的开源大语言模型了,甚至在一些性能测试中比 LLama3 表现还突出。谁不想试试看呢&…

unity基础(五)地形详解

目录 一 创建地形 二 调整地形大小 三 创建相邻地形 四 创建山峰 五 创建树木 七 添加风 八 添加水 简介: Unity 中的基础地形是构建虚拟场景的重要元素之一。 它提供了一种直观且灵活的方式来创建各种地形地貌,如山脉、平原、山谷等。 通过 Unity 的地形…

嵌入式硬件VS软件,到底哪个更难?

在嵌入式系统开发中,硬件和软件是密不可分的两个方面。但是,究竟是硬件开发更具挑战性,还是软件开发更难以应对呢?本文将就这一问题展开讨论,探究嵌入式硬件和软件在开发过程中的各种挑战与特点。 一、硬件开发&#…

数据预处理之基于预测的(线性,ARIMA)异常值检测#matlab

基于密度的LOF异常值检测可见上篇文章。以下介绍基于预测的异常值检测: 1.基于预测的异常值检测方法 基于预测的异常值检测方法,特别是结合线性回归和ARIMA(自回归积分滑动平均模型)模型,是数据分析中常用的技术。这…

Jenkins For Windows编译构建C#项目环境搭建(完整版)

安装Jenkins 下载Windows安装包 官方下载地址 选择稳定版,这里下载的是最新版,如需下载指定版本点击 以前的发行版 配置java环境 下载 java jdk 17 jdk17官方下载链接 这里下载的是msi版本的安装包 安装jdk17 双击运行安装包,一直下…

VS2022 使用C++访问 mariadb 数据库

首先,下载 MariaDB Connector/C++ 库 MariaDB Products & Tools Downloads | MariaDB 第二步,安装后 第三步,写代码 #include <iostream> #include <cstring> #include <memory> #include <windows.h>#include <mariadb/conncpp.hpp>…

RocketMq使用简单案例

1. 在pom.xml中添加rocketmq依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version> </dependency> 注意&#xff1a;rocketmq的版本需要…

开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

GOPS全球运维大会作为国内外运维领域最具影响力的技术盛会之一&#xff0c;旨在汇聚全球运维精英&#xff0c;分享运维领域的前沿技术、实践经验与创新理念。6月28日&#xff0c;博睿数据&#xff08;bonree.com&#xff0c;股票代码688229&#xff09;将受邀出席第二十三届 GO…