【译】MySQL复制入门: 探索不同类型的MySQL复制解决方案

原文地址:An Introduction to MySQL Replication: Exploring Different Types of MySQL Replication Solutions

在这篇博文中,我将深入介绍 MySQL 复制,回答它是什么、如何工作、它的优势和挑战,并回顾作为 MySQL 环境(特别是 Percona Server for MySQL)一部分的一些 MySQL 复制概念。最后,我还将澄清人们对复制的一些常见误解,以及 Percona 可以提供哪些帮助。

什么是 MySQL 复制?

MySQL 复制是将主 MySQL 数据库中的数据复制并发送到一个或多个辅助数据库(称为副本)的过程。
复制确保信息被复制并有目的地填充到另一个环境中,而不是只存储在一个位置(基于源环境的事务)。
这样做的目的是将基础架构上的辅助服务器用于读取或其他管理解决方案。下图显示了一个 MySQL 复制环境示例。
在这里插入图片描述

MySQL 复制安装要求

在本节中,我们将介绍实施 MySQL 复制的基本要素:

前提条件和要求:

  • Primary-Replica 配置: 确保有一个主 MySQL 数据库和一个或多个副本 MySQL 数据库。
  • 网络连接: 在主服务器和副本服务器之间建立可靠的网络连接。
  • MySQL 版本: 确保主服务器和副本服务器上的 MySQL 版本与复制兼容。

安装 MySQL 复制 - 具体步骤:

  • 备份数据: 在开始之前,创建主数据库备份,以防止在设置过程中丢失数据。
  • 配置主服务器:
    • 编辑主服务器上的 MySQL 配置文件(my.cnf 或 my.ini),启用二进制日志记录。
    • 重新启动 MySQL 服务。
  • 创建复制用户:
    • 登录主服务器上的 MySQL,创建具有必要权限的专用复制用户。
  • 记录二进制日志坐标:
    • 记下当前二进制日志文件和主服务器上的位置。
  • 配置复制服务器:
    • 在每个副本服务器上,编辑 MySQL 配置文件,将其配置为副本。
    • 将 server-id 设置为唯一值。
    • 指定主服务器的主机名或 IP 地址。
    • 在每个副本上重新启动 MySQL 服务。
  • 初始化复制:
    • 在其中一个副本服务器上运行 CHANGE MASTER TO 命令,指定主服务器的二进制日志文件和位置。
    • 启动副本服务器的复制进程。
  • 验证复制:
    • 使用 SHOW SLAVE STATUS 检查复制的状态。确保 "Slave_IO_Running "和 "Slave_SQL_Running "都显示 “Yes”。
  • 添加更多副本(可选):
    • 如果需要,在其他副本服务器上重复配置步骤。
  • 监控和维护:
    • 定期监控复制状态和日志。
    • 执行日常维护和备份,确保数据完整性。
  • 扩展和负载平衡(可选):
    • 如果有多个副本,请实施负载平衡和故障切换机制。

MySQL 复制有哪些潜在优缺点?

MySQL复制可提供高可用性、负载平衡和数据冗余,从而提高系统可靠性。它还能实现地理分布式数据库的灾难恢复。不过,考虑潜在的缺点也很重要,包括管理副本的复杂性增加、复制滞后的可能性以及需要监控和维护以确保各副本的一致性和可靠性。

优点

MySQL 复制有很多优点,但其中几个重点包括:通过将读取密集型工作负载分布到多个副本、降低主数据库服务器负载和提高整体性能来增强可扩展性。复制还能在主服务器不可用时切换到副本服务器,从而提高数据库可用性。
最后,在发生灾难的情况下,数据和数据库可以快速恢复,因为复制提供了地理上分散的数据副本。

缺点

尽管有这么多好处,MySQL 复制也会面临一些潜在的缺点。一个非常常见的问题是数据一致性,尤其是在写入活动较多的设置中。副本可能会落后于主服务器,从而影响任何依赖实时数据的应用程序。
另一个问题是单点故障风险。如果主服务器出现故障,整个复制过程就会中断。实施前面讨论的故障转移机制可以降低这种风险。
在安全性方面,如果没有正确配置加密和访问控制,主服务器和副本服务器之间传输的数据可能会受到攻击。

MySQL 复制有哪些不同类型?

您实际上有几种不同的选择:

标准异步复制(Standard asynchronous replication)

异步复制意味着事务完全在本地环境中完成,不受复制本身的影响。

在完成更改后,主线程会将数据修改或实际语句填充到二进制日志中(基于行的复制和基于语句的复制之间的区别–稍后详述)。转储线程读取二进制日志,并将其发送给副本 IO 线程。副本使用其 IO 线程将其放入自己的预处理队列(称为中继日志)。

副本使用 SQL 线程执行副本数据库中的每次更改。
在这里插入图片描述

半同步复制(Semi-synchronous replication)

半同步复制是指副本和主服务器之间相互通信,以保证事务的正确传输。只有当其中一个副本确认事务已正确放入副本的一个中继日志时,主服务器才会填充 binlog 并继续其会话。

半同步复制能保证事务被正确复制,但不能保证在副本上的提交实际发生。
在这里插入图片描述
需要注意的是,半同步复制确保主服务器等待继续处理特定会话中的事务,直到至少有一个副本 ACK 了事务接收(或超时)。这与异步复制不同,半同步复制允许额外的数据完整性。

请记住,半同步复制会影响性能,因为它需要等待副本实际 ACK 的往返。

组复制(Group Replication)

这一新概念在 MySQL 社区版 5.7 中引入,并在 MySQL 5.7.17 中得到认可。它是一个用于虚拟同步复制的全新插件。
每当在一个节点上执行事务时,插件都会尝试与其他节点达成共识,然后再将完成的事务返回给客户端。虽然该解决方案与标准的 MySQL 复制概念完全不同,但它基于使用 binlog 生成和处理日志事件。

以下是组复制的架构示例。
在这里插入图片描述

Percona XtraDB Cluster / Galera Cluster

另一种可将信息复制到其他节点的解决方案是 Percona XtraDB Cluster。该解决方案专注于提供一致性,还使用认证流程来保证事务避免冲突并正确执行。

在这种情况下,我们谈论的是集群解决方案。每个环境都使用相同的数据,节点之间通过通信来保证一致性。

Percona XtraDB Cluster 有多个组件:

  • 用于 MySQL 的 Percona 服务器
  • Percona XtraBackup,用于执行运行集群的快照(如果要恢复或添加节点)。
  • wsrep 修补程序/Galera 库

该解决方案实际上是同步的,可与组复制(Group Replication)相媲美。不过,它还具有使用多主复制的功能。Percona XtraDB Cluster 等解决方案是提高数据库基础架构可用性的组成部分。
在这里插入图片描述
通过我们的电子书了解如何优化数据库安装配置以实现高可用性,Percona Distribution for PostgreSQL: High Availability With Streaming Replication

基于行的复制与基于语句的复制(Row-Based Replication Vs. Statement-Based Replication)

基于语句的复制

在基于语句的复制中,SQL 查询本身被写入二进制日志。例如,副本会执行完全相同的 INSERT/UPDATE/DELETE 语句。

这种系统有很多优缺点:

  • 由于实际语句记录在二进制日志中,因此审计数据库更加容易
  • 通过线路传输的数据更少
  • 非确定性查询(即那些其结果可能因多种因素而变化的查询)可在副本环境中造成实际破坏
  • 使用基于语句的复制(基于 SELECT 的 INSERT)进行某些查询时,可能会出现性能劣势
  • 由于 SQL 的优化和执行,基于语句的复制速度较慢

基于行的复制

基于行的复制是从 MySQL 5.7.7 开始的默认选择,它有很多优点。行更改会记录在二进制日志中,而且不需要上下文信息。这消除了非确定性查询的影响。

其他一些优势包括

  • 包含少量行更改的高并发查询的性能提升
  • 显著提高数据一致性

当然,也有一些缺点:

  • 如果有修改大量行的查询,网络流量会大大增加
  • 更难审核数据库中的更改
  • 在某些情况下,基于行的复制可能比基于语句的复制更慢

处理故障和确保高可用性

确保 MySQL 复制的高可用性对于不间断的数据库访问非常重要,有几种策略可用于实现这一目标。其中一种方法是实施故障转移(failover)机制。故障切换可确保在主 MySQL 服务器因硬件故障或其他问题而不可用时,系统无缝切换到备用副本。设置故障转移机制可以使用负载平衡器或代理服务器来完成,它们会持续监控主服务器的健康状况。一旦发现问题,这些工具就会自动将流量重定向到备用副本。

半同步复制是另一种在高可用性 MySQL 设置中确保数据一致性的重要技术。这种方法要求在主服务器上提交事务之前,至少要有一个副本确认,从而确保数据更改在主服务器上确认之前,安全地复制到至少一个副本。这就降低了主服务器发生故障时数据丢失的风险。通过优先考虑数据一致性而不是原始性能,半同步复制为防止数据差异提供了一个额外的保护层,使其成为对保持数据完整性至关重要的高可用性配置中的一项重要功能。

在我们的电子书中了解高可用性策略,Percona Distribution for MySQL: High Availability With Group Replication

解答关于复制的常见错误认识

1. 复制等同于集群。

标准异步复制不是同步群集。请记住,标准和半同步复制并不能保证环境服务于相同的数据集。使用 Percona XtraDB 集群时情况就不同了,在这种情况下,每台服务器实际上都需要处理每项变更。否则,受影响的节点将从集群中删除。异步复制没有这种故障安全机制。在不一致状态下,它仍然接受读取。

2. 复制听起来很不错,我可以将其用作手动故障切换解决方案。

从理论上讲,这些环境应具有可比性。但是,影响数据传输效率和一致性的参数有很多。只要使用异步复制,就无法保证事务正确进行。你可以通过提高配置的耐用性来规避这一问题,但这需要付出性能代价。您可以使用 pt-table-checksum 工具验证主副本和副本的一致性。

3. 我有复制功能,所以实际上不需要备份。

复制是拥有数据集可访问副本的一个很好的解决方案(例如,报告问题、读取查询、生成备份)。但这不是备份解决方案。异地备份可以确保在发生任何重大灾难、用户错误或其他原因时重建环境。有些人使用延迟复制。但是,即使是延迟复制也不能取代适当的灾难恢复程序。

4. 我有复制功能,因此环境现在可以平衡事务的负载。

虽然通过使用同一数据集运行辅助实例,您可能已经提高了环境的可用性,但您仍可能需要将读取查询指向副本,而将写入查询指向主实例。您可以使用代理工具,或在自己的应用程序中定义此功能。

5. 复制会大大降低主系统的运行速度。

复制对主系统的性能影响很小。Peter Zaitsev 在此发表了一篇有趣的文章,讨论了复制对主数据库的潜在影响。请记住,写入二进制日志可能会影响性能,尤其是在有大量小事务的情况下,这些事务会被多个副本转储和接收。

当然,还有许多其他参数可能会影响实际主服务器和副本的性能。

查看 MySQL 复制操作

为确保客户满意度并满足需要高可用性(HA)和广泛使用的应用程序的要求,必须仔细考虑数据库架构和部署。这通常需要达到卓越的正常运行时间水平,例如令人羡慕的 “5 个 9”(99.999%)可用性。

要深入了解这一主题并探索 Percona 有关 HA 架构和部署的建议,我们诚邀您下载我们的白皮书。在白皮书中,您将看到旨在提供卓越可用性的解决方案的技术概述,该解决方案尤其适合涉及高读写应用的场景。

了解更多信息: 免费下载我们的白皮书《High Availability Solutions with Percona Distribution for MySQL》!

常见问题

什么是 MySQL 复制?

MySQL复制是将主MySQL数据库中的数据复制并发送到一个或多个称为副本的辅助数据库的过程。

MySQL复制如何工作?

MySQL复制的工作原理是在主服务器的二进制日志中记录数据变化,然后在副本服务器上重放这些变化,以保持同步。

为什么使用MySQL复制?

MySQL复制有多种用途,包括提高数据库性能、为灾难恢复提供数据冗余,以及分配数据库负载以进行扩展。

MySQL复制有不同类型吗?

MySQL复制有多种类型,包括异步复制和同步复制、基于语句的复制和基于行的复制,以及用于高可用性的组复制。

我可以在不同的 MySQL 版本之间进行复制吗?

一般来说,最好在相同或兼容的 MySQL 版本之间进行复制,以确保兼容性和一致性。不过,在某些配置和预防措施下,可以进行一些有限的跨版本复制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数美滑块研究

周一,在清晨的阳光照耀下,逆向山脚下的小镇宁静而安详。居民们忙碌地开始一天的生活,而在爬虫镇子的边缘,一座古朴的道观显得格外神秘。 阿羊正静静地坐在青石长凳上,摸鱼养神。突然,一道清脆的声音在他耳…

android studio接入facebook踩坑1

今天在接入facebook第三方登录的时候,点击登录按钮,APP闪退,并报错 java.lang.RuntimeException Failure delivering result ResultInfo{whonull,request64206,result-1} 新文章链接https://lengmo714.top/facebook1.html 如下图:…

【Unity】Unity项目转抖音小游戏(三)资源分包,抖音云CDN

业务需求,开始接触一下抖音小游戏相关的内容,开发过程中记录一下流程。 使用资源分包可以优化游戏启动速度,是抖音小游戏推荐的一种方式,抖音云也提供存放资源的CDN服务 抖音云官方文档:https://developer.open-douyi…

vue + SpringBoot + flowable 实现工作流审批功能 (流程图部署)

目录 搭建前端vue项目 vue init webpack project_name 初始化项目 导入 element-ui 框架 npm install element-ui -s 设置 element-ui 全局配置 编辑 main.js 文件 import ElementUI from "element-ui"; // ui框架导入 import element-ui/lib/theme-chal…

网络模型-PoE技术

一、PoE简介 以太网供电PoE(Powerover Ethernet)是指通过以太网网络进行供电,也被称为基于局域网的供电系统PoL(PoweroverLAN)或有源以太网(Active Ethernet)。 1、PoE的优势: 可靠: 电源集中供电,备份方便。连接简捷: 网络终端不需外接电源&#xf…

大数据——大数据架构

一:大数据应用场景 1.离线批处理 数据量比较大,延迟比较高 2.实时检索 实时检索中的hbase按key值检索较快,因为其存储是顺序存储,但是对value的检索就相对较慢。 数据量大,实时查询数据,不能对数据做大量…

商品发布功能

文章目录 1.SPU和SKU介绍1.SPU2.SKU3.两者之间的关系 2.完成商品发布界面1.组件引入1.commoditylaunch.vue 引入到 src/views/modules/commodity下2.multiUpload.vue 引入到 src/components/upload/multiUpload.vue 2.创建菜单1.创建目录2.创建菜单,注意菜单路由要匹…

打破壁垒,实现多引擎3D内容轻量化交付|点量云流

随着应用场景的不断拓展,传统的视频流技术已难以满足日益复杂的需求。当前市场上的视频流解决方案支持的引擎基本是UE、Unitiy输出的exe3D应用,在处理WebGL等3D内容时,也存在诸多局限性,例如性能限制、跨平台兼容性问题、无法直接…

AGI技术与原理浅析:曙光还是迷失?

前言:回顾以往博客文章,最近一次更新在2020-07,内容以机器学习、深度学习、CV、Slam为主,顺带夹杂个人感悟。笔者并非算法科班出身,本科学制药、研究生学金融,最原始的算法积累都来源于网络,当时…

Wpf 使用 Prism 实战开发Day23

自定义对话框服务 当原有对话框不能满足需求的时候,可以通过自定义对话框来实现特殊的需求 一.自定义对话框主机服务步骤: 1.建立一个IDialogHostService 接口类,继承自 IDialogService 对话框服务类。并且自定义基类的服务方法。 public …

sh控制台输入文字多行 按“# ꧂ ꧁”结束

如果在Unix shell中输入多行文字,那么这样操作: 1. 打开您的终端(Terminal)。 2. 输入您的文字,每行文字后按回车键。 3. 当您完成输入所有文字后,输入“# ꧂ ꧁”然后按回车键,表示输入结束。…

海外私人IP和原生IP有什么区别,谁更有优势?

一、什么是海外私人IP?什么是原生IP? 1、海外私人IP: 海外私人IP是由专门的服务提供商提供的IP地址,这些IP地址通常与特定地理位置或国家相关联。这些IP地址独享私人而不用与其他用户共享。海外私人IP访问特定国家或地区的网站&am…

【golang】内存对齐

什么是内存对齐 在访问特定类型变量的时候通常在特定的内存地址访问,这就需要对这些数据在内存中存放的位置有限制,各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 内存对齐是编译器的管辖…

2024 年 5 种领先的小语言模型:Phi 3、Llama 3 等

2024 年 5 种领先的小语言模型:Phi 3、Llama 3 等 近年来,GPT-3 和 BERT 等大型语言模型的发展改变了人工智能的格局,它们以其强大的功能和广泛的应用而闻名。 然而,除了这些巨头之外,一种新的 AI 工具类别也正在掀起…

平板如何实现无纸化会议

为了实现高效的无纸化会议,连通宝可以是在内部网络部署,那么,平板如何实现无纸化会议? 1. 服务器配置: 部署专用无纸化会议系统服务器(如rhub无纸化会议服务器)至组织的内部网络中。确保该服务…

[论文笔记]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

引言 今天带来一篇经典论文REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS的阅读笔记,论文中文意思是 在语言模型中协同推理和行动。 虽然大型语言模型(LLMs)在语言理解和互动决策任务中展现出强大的能力,但它们在推理(例如思维链提示)和…

【计算机毕业设计】基于SSM++jsp的实验室耗材管理系统【源码+lw+部署文档】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKB方案

大纲 序列化反序列化完整TypeHandlerSQL XML完整XML Mapper测试代码代码 在《0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKT方案》中,我们介绍WTK方案的优点,也感受到它的繁琐和缺陷。比如: 需要借助ST_GeomFromText…

B站自动回复插件_无需千粉,轻松适配引流拉新资源分享

项目介绍 B站关键词自动回复插件,无需千粉, 很适合做流量做引流做私欲的朋友, 前期没有千粉是无法开启官方自动回复的, 适当的情况下可以用这个插件顶一下, 三联好评领取资源的打法真的超级涨粉, 感谢插件…

YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在YOLOv5的GFLOPs计算量中,卷积占了其中大多数的比列,为了减少计算量,研究人员提出了用EfficientNet代替b…