问:MySQL主从同步的机制梳理?

MySQL主从复制是一种数据库复制技术,通过将一个MySQL数据库服务器(主节点)的数据复制到一个或多个其他MySQL数据库服务器(从节点),实现数据的自动同步。这种技术不仅提高了数据的可用性,还能通过读写分离提升系统的性能。本文将介绍MySQL主从数据库节点复制的过程理。

准备阶段

1. 环境准备

首先,需要准备两台主机,其中一台作为主服务器(Master),另一台作为从服务器(Slave),并确保两台主机都装有MySQL数据库。例如,主服务器的IP地址可以是192.168.198.140,端口号为3306;从服务器的IP地址可以是192.168.168.141,端口号也为3306。

2. 配置MySQL

在主服务器上,编辑MySQL配置文件(通常是/etc/my.cnf),启用二进制日志(Binary Log)功能,并设置唯一的server-id。例如:

[mysqld]
server-id=1
log-bin=mysql-bin

在从服务器上,同样编辑MySQL配置文件,设置唯一的server-id(不同于主服务器的ID),但不需要启用二进制日志功能,因为从服务器不需要记录自身的数据变更。

[mysqld]
server-id=2

完成配置后,重启MySQL服务以使更改生效。

3. 创建复制账号

在主服务器上,创建一个专门用于复制的MySQL用户,并授予复制权限。例如:

CREATE USER 'repl'@'192.168.198.%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.198.%';
FLUSH PRIVILEGES;

4. 备份主库数据

在进行复制之前,需要对主库的数据进行备份,以便在从库上恢复相同的数据。可以使用mysqldump工具来备份数据库。例如,如果主库上有一个名为school的数据库,可以使用以下命令进行备份:

mysqldump -uroot -p'root_password' -B school > /backup/mysql_bak.$(date +%F).sql.gz

备份完成后,将备份文件传输到从服务器。

复制阶段

1. 初始化从库

在从服务器上,创建一个与主库相同的数据库(例如school),并导入主库的备份数据。

mysql -uroot -p'root_password' < /backup/mysql_bak.$(date +%F).sql.gz

2. 配置从库复制

在从服务器上,执行以下SQL命令来配置复制关系:

CHANGE MASTER TOMASTER_HOST='192.168.198.140',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;

其中,MASTER_LOG_FILEMASTER_LOG_POS是从主服务器上获取的当前二进制日志文件名和位置,可以使用以下命令在主服务器上查看:

SHOW MASTER STATUS;

3. 启动从库复制

在从服务器上,启动复制线程:

START SLAVE;

然后,可以通过以下命令查看复制状态,确保I/O线程和SQL线程都在正常运行:

SHOW SLAVE STATUS\G

如果Slave_IO_RunningSlave_SQL_Running都是Yes,则表示复制配置成功。

确认阶段

1. 测试数据同步

在主服务器上,插入、更新或删除一些数据,然后在从服务器上检查这些更改是否已同步。例如,可以在主服务器上执行以下SQL命令:

USE school;
INSERT INTO student (name, age) VALUES ('Alice', 20);

然后,在从服务器上执行相同的查询来验证数据是否已同步:

USE school;
SELECT * FROM student WHERE name = 'Alice';

如果查询结果包含刚刚插入的数据,则表示数据同步成功。

2. 验证读写分离

为了充分利用主从复制的优势,通常会将写请求发送到主服务器,将读请求发送到从服务器。这可以通过应用程序的数据库连接配置来实现。例如,在Java应用程序中,可以配置两个数据源,一个指向主服务器,另一个指向从服务器,并根据操作类型(读或写)选择合适的数据源。

主从数据同步过程

在这里插入图片描述

1. 数据同步流程

MySQL主从复制的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。具体流程如下:

  • 主服务器记录变更:当主服务器上的数据发生更改时(例如,执行INSERT、UPDATE或DELETE操作),这些更改会被记录到二进制日志中。二进制日志是一个记录了所有对数据库产生变更的语句的日志文件。
  • 从服务器请求日志:从服务器上的I/O线程会定期或根据配置实时连接到主服务器,请求最新的二进制日志内容。主服务器上的log dump线程会负责发送这些日志给从服务器。
  • 从服务器应用日志:从服务器上的I/O线程接收到主服务器发送的二进制日志后,会将其写入到中继日志(Relay Log)中。然后,从服务器上的SQL线程会读取中继日志,解析其中的二进制日志事件,并在从服务器上执行相应的数据变更操作,以使从服务器上的数据与主服务器保持一致。

2. 关键组件

  • 二进制日志(Binary Log):主服务器上记录所有数据变更操作的日志文件。
  • 中继日志(Relay Log):从服务器上存储从主服务器接收到的二进制日志副本的日志文件。
  • I/O线程:从服务器上的线程,负责连接到主服务器并请求二进制日志内容。
  • Log Dump线程:主服务器上的线程,负责发送二进制日志给从服务器。
  • SQL线程:从服务器上的线程,负责读取中继日志并执行其中的数据变更操作。

3. 问题和对策

  • 数据延迟:由于从服务器的复制是异步进行的,因此从服务器上的数据可能会有一定的延迟。这可以通过使用半同步复制来减轻,半同步复制要求主服务器在返回写操作成功给客户端之前,至少等待一个从服务器确认已经收到并应用了这些变更。
  • 网络故障:网络问题可能导致从服务器无法及时获取主服务器的二进制日志。这可以通过在网络层面进行冗余配置(例如使用双网卡、多路径路由等)来增强网络的可靠性。
  • 数据一致性问题:在某些情况下(例如,从服务器上的SQL线程执行失败),可能会导致数据不一致。这可以通过定期检查和校验主从服务器上的数据来及时发现和解决。此外,使用GTID(Global Transaction ID)复制也可以提高数据的一致性,因为GTID是基于事务的唯一标识来跟踪和复制事务的。
  • 性能瓶颈:当数据量非常大时,复制过程可能会对主服务器的性能产生影响。这可以通过优化MySQL的配置(例如增加缓冲区大小、调整日志格式等)来缓解。此外,使用级联复制(即将多个从服务器连接到一个或多个中间从服务器)也可以分散主服务器的负载。

综上所述,MySQL主从复制是一种强大且灵活的数据同步技术,通过合理的配置和优化,可以实现高效、稳定的数据同步和读写分离,从而提高系统的可用性和性能。

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

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

相关文章

基于BILSTM及其他RNN序列模型的人名分类器

数据集Kaggle链接 NameNationalLanguage | Kaggle 数据集分布: 第一列为人名,第二列为国家标签 代码开源地址 Kaggle代码链接 https://www.kaggle.com/code/houjijin/name-nationality-classification Gitee码云链接 人名国籍分类 Name Nation classification: using BI…

期权懂|期权新手入门教学:期权合约有哪些要素?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 期权新手入门教学&#xff1a;期权合约有哪些要素&#xff1f; 期权合约&#xff1a;是指约定买方有权在将来某一时间以特定价格买入或卖出约定标的物的标准化或非标准化合约。期…

Oracle OCP认证考试考点详解082系列16

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 76. 第76题&#xff1a; 题目 解析及答案&#xff1a; 以下哪三项活动会被记录在数据库的警报日志中&#xff1f; A. 块损坏错误 数据库…

【Linux篇】面试——用户和组、文件类型、权限、进程

目录 一、权限管理 1. 用户和组 &#xff08;1&#xff09;相关概念 &#xff08;2&#xff09;用户命令 ① useradd&#xff08;添加新的用户账号&#xff09; ② userdel&#xff08;删除帐号&#xff09; ③ usermod&#xff08;修改帐号&#xff09; ④ passwd&…

论文阅读《机器人状态估计中的李群》

目录 摘要1 介绍2 微李理论2.1 李群2.2 group actions2.3 正切空间和李代数 摘要 李群是一个古老的数学抽象对象&#xff0c;可以追溯到19世纪&#xff0c;当时数学家 Sophus Lie奠定了连续变换群理论的基础。多年后&#xff0c;它的影响已经蔓延到科学和技术的各个领域。在机…

智能零售柜商品识别

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

综合案例铁锅炖(CSS项目大杂烩)

小工具&#xff1a;snipaste 全世界最好用的截图工具来了 Snipaste是一个强大简单的截图工具&#xff0c;方便的点就在于可以把截图贴回屏幕上 常用快捷方式有这些&#xff1a; 1.F1截图&#xff0c;同时测量大小&#xff0c;设置箭头&#xff0c;文字书写 2.F3在桌面置顶显示…

稀疏视角CBCT重建的几何感知衰减学习|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 Geometry-Aware Attenuation Learning forSparse-View CBCT Reconstruction 稀疏视角CBCT重建的几何感知衰减学习 01 文献速递介绍 稀疏视角锥形束计算机断层扫描&#xff08;CBCT&#xff09;重建的几何感知学习方法 锥形束计算机断层扫描&#xff08;CBCT&a…

河南省的一级科技查新机构有哪些?

科技查新&#xff0c;简称查新&#xff0c;是指权威机构对查新项目的新颖性作出文献评价的情报咨询服务。这一服务在科研立项、成果鉴定、项目申报等方面发挥着至关重要的作用。河南省作为中国的重要科技和教育基地&#xff0c;拥有多个一级科技查新机构&#xff0c;为本省及全…

https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR

问题描述 场景&#xff1a; https网站&#xff0c;请求http图片资源报错&#xff1a;net::ERR_SSL_PROTOCOL_ERROR 原因&#xff1a; Chrome 81 中&#xff0c;对混合内容资源加载策略进行了改变&#xff0c;会自动升级到 https:// &#xff0c;如果无法通过 https:// 加载&am…

【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)

3. 微积分 (Calculus) 导数和梯度&#xff1a;用于优化算法&#xff08;如梯度下降&#xff09;中计算损失函数的最小值。偏导数&#xff1a;在多变量函数中优化目标函数。链式法则&#xff1a;在反向传播算法中用于计算神经网络的梯度。 导数和梯度&#xff1a;用于优化算法…

华为大咖说 | 浅谈智能运维技术

本文分享自华为云社区&#xff1a;华为大咖说 | 浅谈智能运维技术-云社区-华为云 本文作者&#xff1a;李文轩 &#xff08; 华为智能运维专家 &#xff09; 全文约2695字&#xff0c;阅读约需8分钟 在大数据、人工智能等新兴技术的加持下&#xff0c;智能运维&#xff08;AI…

WebStorm 如何调试 Vue 项目

前言 在日常开发和各种教程中&#xff0c;最常见的 debug 方式就是在代码中插入 console.log 语句&#xff0c;然后在 Chrome 控制台中查看日志。显而易见&#xff0c;插入console.log 的效率不高&#xff0c;那是否有更高效的 debug 方式呢&#xff1f;断点调试允许开发者在代…

【循环神经网络】

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类用于处理序列数据的神经网络&#xff0c;擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构&#xff0c;使得当前时刻的输出可以受之前时刻信息的影响&#xff0c;因此被广泛应用于自然语…

sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量

sqoop脚本如下&#xff1a; sqoop import -D mapred.job.queue.namehighway \ -D mapreduce.map.memory.mb4096 \ -D mapreduce.map.java.opts-Xmx3072m \ --connect "jdbc:oracle:thin://1.2.3.4.5:61521/LZY2" \ --username root \ --password 123456 \ --query &…

低功耗WTK6900P语音ic方案助力电子烟技术革新 打造个性化吸烟体验

在这个科技日新月异的时代&#xff0c;每一个细节的创新都是对传统的一次超越。今天&#xff0c;我们自豪地宣布一项革命性的融合——将先进的频谱技术与电子烟相结合&#xff0c;通过WTK6900P芯片的卓越性能&#xff0c;为您开启前所未有的个性化吸烟体验。这不仅是一次技术的…

《基于深度学习的车辆行驶三维环境双目感知方法研究》

复原论文思路&#xff1a; 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话&#xff0c;求d的话&#xff0c;只和xl-xr有关系&#xff0c;这样一来&#xff0c;是不是只要两张图像上一个测试点的像素位置确定&#xff0c;对应的深…

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作&#xff0c;仅供学习参考。 一、sqlite数据库操作类封装&#xff1a; sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

Qt初识简单使用Qt

使用C代码实现hello world 之前介绍过用图形化界面的方式创建hello world&#xff0c;这里我们使用C代码的方式再来实现一次hello world。 如上&#xff0c;首先要先包含一个头文件。 在QT这里&#xff0c;每一个类都有一个对应的同名头文件。比如这里我就包含了 <QLabel&…

高效运维:构建全面监控与自动化管理体系

在当今数字化时代&#xff0c;企业IT系统的稳定运行直接关系到业务的连续性和竞争力。运维团队作为保障系统稳定运行的中坚力量&#xff0c;面临着前所未有的挑战。随着云计算、大数据、物联网等技术的快速发展&#xff0c;系统架构日益复杂&#xff0c;运维工作也从传统的被动…