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

news2024/11/24 22:54:07

原文地址: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 版本之间进行复制,以确保兼容性和一致性。不过,在某些配置和预防措施下,可以进行一些有限的跨版本复制。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

131. 面试中关于架构设计都需要了解哪些内容?

文章目录 一、社区系统架构组件概览1. 系统拆分2. CDN、Nginx静态缓存、JVM本地缓存3. Redis缓存4. MQ5. 分库分表6. 读写分离7. ElasticSearch 二、商城系统-亿级商品如何存储三、对账系统-分布式事务一致性四、统计系统-海量计数六、系统设计 - 微软1、需求收集2、顶层设计3、…

开源大模型与闭源大模型:谁主沉浮?

目录 🍉引言 🍉数据隐私 🍈开源大模型的优势与挑战 🍍优势: 🍍挑战: 🍈闭源大模型的优势与挑战 🍍优势: 🍍挑战: &#x1f34…

【设计模式深度剖析】【2】【创建型】【工厂方法模式】

👈️上一篇:单例模式 | 下一篇:抽象工厂模式👉️ 目录 工厂方法模式概览工厂方法模式的定义英文原话直译 工厂方法模式的4个角色抽象工厂(Creator)角色具体工厂(Concrete Creator)角色抽象产品&#x…

2001-2022年全国31省份互联网发展47个指标合集各省电信业务信息化软件信息技术服务业

全国31省份互联网发展47个指标合集各省电信业务信息化软件信息技术服务业(2001-2022年)插值填补无缺失 整理了各省电信业务、从业人员、电信通信、互联网发展、企业信息化、软件和信息技术服务业等47个互联网主要发展指标,内含原始数据、线性…

Web前端一套全部清晰 ⑨ day5 CSS.4 标准流、浮动、Flex布局

我走我的路,有人拦也走,没人陪也走 —— 24.5.24 一、标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 二、浮动 作用: 让块级元素水平排列。 属性名:floa…

LeetCode1161最大内层元素和

题目描述 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。 解析 在上一题&…

微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor的解决办法

文章目录 一、发现问题二、分析问题二、解决问题 一、发现问题 微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor 二、分析问题 这个提示有点问题,应该是该Characteristic的Descriptor有问题,而不能说nodescriptor。 …

【传知代码】Modnet 人像抠图-论文复现

文章目录 概述原理介绍核心逻辑ModNet 的结构 环境配置WebUI 小结 论文地址 论文GitHub 本文涉及的源码可从Modnet 人像抠图该文章下方附件获取 概述 人像抠图技术在多个领域有着广泛的应用场景,包括但不限于: 展馆互动拍照:展馆中使用的抠…

二叉树的递归实现及例题

目录 遍历方式 示例 原理 前序遍历示例 二叉树的节点个数 原理 层序遍历 原理 这样做的目的是 判断完全二叉树 例题 ​编辑 思路 代码 遍历方式 二叉树的遍历方式可分为: 前序遍历:先访问根,访问左子树,在访问右子…

2024.05.24 学习记录

1、面经复习: js基础、知识深度、js垃圾回收 2、代码随想录刷题:动态规划 完全背包 all 3、rosebush 完成 Tabs、Icon、Transition组件

C++中获取int最大与最小值

不知道大家有没有遇到过这种要求:“返回值必须是int,如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。例如,小于 −2^31 的整数应该被固定为 −2^31 ,大…

【Ubuntu查看硬盘和网络配置信息】解决方案

1.查看硬盘序列号 搜索系统中有应用,打开“磁盘”,因为我本人是只设置了一个分区,所以打开如下,从上面可以得到硬盘序列号 2.查看ip地址和MAC地址 ctrl alt t 打开命令行 输入ifconfig, 如下图所示,MAC地址即为&…

多家知名媒体到访“光子1号金融算力中心“ 交流AI与算力未来观

5月23日,企商在线 “光子1号金融算力中心媒体参观日”活动成功举办,十多家主流媒体、IT行业媒体及自媒体代表走进光子1号金融算力中心,深入了解企商业务发展、战略规划及“光子1号金融算力中心”等企商打造的新型数字基础设施,共同…

论文研读之hpn-ssh: High speed bulk data transfer using the SSH protocol

优化解决方案的策略 其中提到盲目的增加窗口大小实际上可能导致性能下降,这种下降可能由这几个因素引起:中间路由器上的缓冲区填满;路径过快饱和;过度缓冲;引入新的问题。虽然较大的缓冲区在某些情况下可能提高性能,但也有引入新的、难以诊断的问题的风险。这种复杂性使…

QtCreator,动态曲线实例

样式图: .ui 在sloem1.ui文件中,拖入一个label控件, 头文件.h #include "QtGui/QPainter.h" #include "QtCore/QTimer.h"protected:bool eventFilter(QObject *obj,QEvent *event);void labelPaint();public slots: /…

6款网站登录页(附带源码)

6款网站登录页 效果图及部分源码123456 领取源码下期更新预报 效果图及部分源码 1 部分源码 <style>* {margin: 0;padding: 0;}html {height: 100%;}body {height: 100%;}.container {height: 100%;background-image: linear-gradient(to right, #fbc2eb, #a6c1ee);}.l…

NSS‘题目练习3

[SWPUCTF 2021 新生赛]easyupload3.0 打开题目发现要求上传.jpg文件 先上传抓包&#xff0c;尝试更改后缀 换一种形式 文件头绕过 都试过之后尝试上传.htaccess文件&#xff0c;发现上传成功 会将之后上传的文件后缀自动更名为.php 再上传.jpg文件 蚁剑连接找到flag [SWPUCTF …

【oracle的安装记录】

oracle安装记录 一、下载以后&#xff0c;解压到同一路径下面 二、双击可执行安装文件&#xff0c;等待文件加载 三、双击以后&#xff0c;弹出信息 四、提示该窗口&#xff0c;点击【是】即可 五、未填写配置安全更新信息 六、弹出小窗口&#xff0c;选择【是】 七、安装选项…

宿舍管理系统--毕业设计

毕业设计&#x1f4bc;MD5加密&#x1f512;SSM框架&#x1f3a8;Layui框架&#x1f384; 实现功能 管理员的登录与登出 管理员,班级,学生,宿舍&#xff0c;卫生&#xff0c;访客各模块增删改查 个别模块关联查询 各个模块数据导出Excel 一些截图

Log360:护航安全,远离暗网风险

暗网有时候就像是一个神秘的地下世界&#xff0c;是互联网的隐蔽角落&#xff0c;没有任何规则。这是一个被盗数据交易、网络犯罪分子策划下一步攻击的地方。但仅仅因为它黑暗&#xff0c;不意味着你要对潜在的威胁视而不见。 暗网 这就是ManageEngine Log360的用武之地&…