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

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

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

相关文章

“智能体时代:探索无限可能——零代码构建智能教练智能体“

随着智能体技术的飞速发展,各个领域正经历着空前的变革和新的发展机遇。作为人工智能的一个关键组成部分,智能体以其自我驱动、智能响应和适应能力,逐渐深入到我们日常生活的各个层面,成为促进社会发展和科技进步的新引擎。 顺应这…

深度神经网络——贝叶斯与朴素贝叶斯定理

概述 贝叶斯定理是概率论中一个非常重要的概念,它提供了一种在已知某些相关事件的概率时,计算另一个事件发生概率的方法。在你提供的内容中,贝叶斯定理被描述为一种“魔法”,因为它能够使计算机通过分析大量的数据来预测人们可能…

十四天学会Vue——Vue核心(理论+实战)中篇(第二天)

声明:是接着上篇讲的哦,感兴趣可以去看一看~ 这里一些代码就不写了,为了缩减代码量,大家知道就可以了: Vue.config.productionTip false //阻止 vue 在启动时生成生产提示。热身小tips,可以安装这个插件&…

【LeetCode】【9】回文数(1047字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现 个人主页:丷从心 系列专栏:LeetCode 刷题指南:LeetCode刷题指南 题目描述 给一个整数x,如果x是一个回文整数,返回true;否…

MIT6.828 Lab2-1 Using gdb

Using gdb gdb使用: xv6 gdb调试方法 问题1: Looking at the backtrace output, which function called syscall? 按照提示开启gdb后键入: b syscall c layout src backtrace输出结果: (gdb) backtrace #0 syscall () at k…

Python + adb 实现打电话功能

前言 其实很多年前写过一篇python打电话的功能,链接如下: Python twilio 实现打电话和发短信功能_自动发短信代码-CSDN博客 今天由于工作需要,又用python写了个关于打电话的小工具,主要是通过ADB方式实现的 实现过程 1.先利用…

YOLOv8+PyQt5鸟类检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

资源包含可视化的鸟类检测系统,基于最新的YOLOv8训练的鸟类检测模型,和基于PyQt5制作的可视化鸟类检测系统,包含登陆页面、注册页面和检测页面,该系统可自动检测和识别图片或视频当中出现的各种鸟类,以及自动开启摄像头…

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目,记住文件夹的存放路径,以我为例,我的文件夹路径为D:\tydic 打开cmd命令窗口,进入刚刚的新建文件夹 切换硬盘: D: 进入文件夹:cd tydic 使…

重学java 49 List接口

但逢良辰,顺颂时宜 —— 24.5.28 一、List接口 1.概述: 是collection接口的子接口 2.常见的实现类: ArrayList LinkedList Vector 二、List集合下的实现类 1.ArrayList集合的使用及源码分析 1.概述 ArrayList是List接口的实现类 2.特点 a.元素有序 —> 按照什么顺…

红外成像人员检测数据集VOC+YOLO格式5838张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5838 标注数量(xml文件个数):5838 标注数量(txt文件个数):5838 标注…

UE5 CommonUI的使用(附源码版)

UE5 CommonUI的使用 前言快速配置配置Game Viewport Client ClassCommonGameViewportClient源代码 创建CommonInputAction表默认导航Action设置CommonUIInputData源码 Bind CommonInputBaseControllerDataCommonInputBaseControllerData源码 Common UI控件库和控件样式CommonUs…

探索Python编程乐趣:制作气泡反弹小游戏

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:Python编程的轻松入门 二、游戏实现原理:气泡反弹的逻辑 …

echarts(6大基础图表)的使用

目录 一、vue2挂载 二、柱状图 2.1、基础柱状图介绍 2.2、标记:最大值\最小值(markPoint)、平均值(markLine) 2.3、显示:数值显示(label)、柱子宽度(barWidth)、横向柱状图 三、折线图 3.1、标记:最大值\最小值(markPoint)、平均值(ma…

微信资源混淆,导致的约束布局 Constraintlayout 控件重叠!

问题 1、广告六要素 虽然我不参与广告 sdk 接入等相关工作,但是最近总是听到一个词广告六要素。这到底是什么? 国内下载类广告,尤其是针对移动应用推广的广告,其成功实施往往围绕几个关键要素进行,这些要素能够帮助…

pcdn服务器应该怎么配?

要配置PCDN(Private Content Delivery Network)服务器,可以按照以下步骤进行: 需求分析:明确业务需求,确定所需的CDN功能和性能参数。这包括预期的流量、负载、内容类型、目标用户群体等。 硬件选择&#…

你真的懂firewalld吗?不妨看看我的这篇文章

一、firewalld简介 firewalld防火墙是Linux系统上的一种动态防火墙管理工具,它是Red Hat公司开发的,并在许多Linux发行版中被采用。相对于传统的静态防火墙规则,firewalld使用动态的方式来管理防火墙规则,可以更加灵活地适应不同…

MyBatis的基础操作

目录 一.什么是MyBatis? 二.使用MyBatis的准备工作 1.引入依赖: 2.配置数据库连接字符串(建立MaBatis和MySQL的连接) 3.在model包中建立数据库对应的实体类UserInfo 三.通过注解的方式实现MyBatis的开发 1.插入语句(Insert) 2.删除语句(Delete) 3.更新语句(Update) 4…

刚接触抖店并开通了个体店,怎么快速起店呢?运营思路参考如下

我是王路飞。 如果你刚接触抖店,并且开通了个体店,但不知道如何做店的话。 其实很简单,抖店的流程并没有这么复杂。 电商的核心无非就是产品,抖店的运营也都是围绕产品展开的。 我给你们说下抖店的运营思路你们可以作为参考&a…

李飞飞亲自撰文:大模型不存在主观感觉能力,多少亿参数都不行

近日,李飞飞连同斯坦福大学以人为本人工智能研究所 HAI 联合主任 John Etchemendy 教授联合撰写了一篇文章,文章对 AI 到底有没有感觉能力(sentient)进行了深入探讨。 「空间智能是人工智能拼图中的关键一环。」知名「AI 教母」李…