【译】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.mzph.cn/diannao/14168.shtml

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

相关文章

【Qt】深入探索Qt主窗口与菜单栏:构建高效用户界面的实践指南

文章目录 前言1. 什么是Main Window?2. 详细了解一下其中的 菜单栏:2.1. 创建菜单栏2.2. 添加快捷键2.3. 添加子菜单2.4. 添加分割线2.5. 添加图标 3. 内存泄漏问题:总结 前言 在现代软件开发中,用户界面的设计对于提升用户体验至关重要。Q…

【雅特力AT32】串口UART、USART配置和使用方法,数组的阻塞发送函数编写,串口接收中断、回环、重定向

【雅特力AT32】串口UART、USART配置和使用方法,数组的阻塞发送函数编写,串口接收中断、回环、重定向 文章目录 串口配置阻塞发送函数接收中断和串口回环串口重定向附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时…

ARM|DSP+FPGA+NVIDIA AI摄像头定制

信迈拥有高性能的摄像头全栈能力:掌握车载模组光学设计能力,具有多名经验丰富光学设计专家;具备丰富的车载摄像模组硬件设计经验;掌握目前市面上大部分车载平台的ISP图像画质服务能力,能自主开发图像ISP和增强算法&…

第十二章 网络编程

第十二章 网络编程 网络协议概述 通信协议: 协议即规则,就好比汽车上路要遵守交通规则一样,为了使全世界不同类型的计算机都可以连接起来,所以制定了一套全球通用的通信协议——Internet协议。有了Internet协议,任何…

【mysql】【docker】mysql8-互为主从

🌸🌸 Linux/docker-compose/mysql8 互为主从 优雅部署 🌸🌸 记录下两台Linux的mysql需要热备份,互为主从,后期加上keepalived实现高可用切换 参考博客:答 案 🌸 一、准备文件 这里…

图形学初识--直线插值算法

文章目录 为什么需要插值算法?插值算法是什么?有哪些常见的插值算法呢?1. 线性插值(Linear Interpolation)2. 多项式插值(Polynomial Interpolation)3. 样条插值(Spline Interpolati…

Blazor 下支持 Azure AD 的多套登录方案

比如上图配置了两套不同的登录方案,各有自己的 TenantId 和 ClientId ,要同时支持他们的登录(其实在同一套 TenantId 和 ClientId 里面配置多个登录账户不就好了,但是......那套登录的管理是在客户自己的Azure AD账户管理下的&…

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常 spring boot3项目中浏览器中访问报错找不到favicon.ico,虽然不影响使用,用api工具也可以忽略这个异常,但是防止浏览器访问时出现异常干扰日志,所…

oracle数据库解析过高分析

解析非常高,通过时间模型可以看到解析占比非常高 解析大致可以分为硬解析( hard parse)、软解析( soft parse)和软软解析( soft soft parse)。如,执行一条 SQL 的时候,如…

Google Find My Device:科技守护,安心无忧

在数字化的时代,我们的生活与各种智能设备紧密相连。而 Google Find My Device 便是一款为我们提供安心保障的实用工具。 一、Find My Decice Netword的定义 谷歌的Find My Device Netword旨在通过利用Android设备的众包网络的力量,帮助用户安全的定位所…

STM32F4_HAL控制GPIO输出——跑马灯实验

1、GPIO工作模式 1.1 端口输入数据寄存器(IDR) 1.2 端口输出数据寄存器(ODR) 1.3 端口置位/复位寄存器(BSRR) 为什么有了 ODR 寄存器,还要这个 BSRR 寄存器呢?我们先看看 BSRR 的寄…

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架,它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口,而无需制定创建对象的具体类,工厂类…

华为OD机试 - 剩余银饰的重量(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

【Python】 如何对对象列表进行排序,有点意思

在Python中,我们经常需要对对象列表进行排序,这可以通过多种方式实现。当对象是一个自定义类实例时,排序通常基于对象的一个或多个属性。Python提供了内置的sorted()函数和列表的sort()方法,它们都允许我们指定一个排序的关键字。…

iPhone彻底删除的照片怎么恢复?专业技巧助您解忧

在使用iPhone的过程中,我们可能会因为误操作或其他原因将一些重要的照片彻底删除。然而,即使照片被彻底删除,也并不意味着它们就永远消失了,它们只是被打上了“可覆盖的空间”的标签。 在照片被新数据覆盖之前,我们仍…

C语言学习【C控制语句:循环】

C语言学习【C控制语句:循环】 while循环 /* 根据用户键入的整数求和 */#include "stdio.h"int main(void) {long num;long sum 0L; /* 把sum初始化为0 */int status;printf("Please enter an integer to be summed");printf(&quo…

基于微信小程序的校园捐赠系统的设计与实现

校园捐赠系统是一种便捷的平台,为校园内的各种慈善活动提供支持和便利。通过该系统,学生、教职员工和校友可以方便地进行捐赠,并了解到相关的项目信息和捐助情况。本文将介绍一个基于Java后端和MySQL数据库的校园捐赠系统的设计与实现。 技术…

快速开发 Chrome插件

什么是 Chrome 插件 Chrome 插件程序是一种用于增强 Google Chrome 浏览器功能的小型软件应用程序。它们可以帮助用户自定义浏览体验、添加新功能、集成外部服务以及自动化任务等。扩展程序使用 HTML、CSS 和 JavaScript 编写,利用 Chrome 提供的 API 来与浏览器及…

18.分布式监控zabbix-proxy

zabbix proxy 使用场景: 监控远程区域设备监控本地网络不稳定区域当 zabbix 监控上千设备时,使用它来减轻 server 的压力简化分布式监控的维护 环境规划: zabbix-server:外网IP地址192.168.111.66 zabbix-proxy:外网IP地址192.168.111.11 内网IP地址…

AI工具推荐:提升工作效率与生活质量

有哪些好用,且国内可用的AI工具? 副本 在AI大发展的年代,还有人在工作、生活中没有使用过AI吗? 今天为大家推荐几款国内可用、好用的AI工具,不论是自媒体文案写作、打工人汇报PPT、还是论文、公文写作,总…