大聪明教你学Java | 带你了解 Binlog 实现 MySQL 主从同步的原理及实现方式

news2025/1/17 0:23:48

前言

🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。
🍊支持作者: 点赞👍、关注💖、留言💌~

之前我们说过,大聪明新加入了一个智慧运输平台建设的项目组,在项目组中学习到了许多之前没有接触过的东西。这不,大聪明又发现平台的建设过程中使用了两套 MySQL 数据库,也就是我们常说的主从库,这时候大聪明有了一个新的疑问:“这个主库和从库是怎么保证数据一致的呢🤔?”。这个新的问题又激起了大聪明的求知欲,接下来我们一起看看大聪明的求知历程✍

MySQL 主从库

其实在搭建一些小的应用软件时,使用一套数据库就够了,那我们先来一起看一下为什么会用到主从库👇

使用主从库的主要原因有两点:

1、在复杂的业务系统中,如果有一句 sql 语句需要锁表,那么就会导致我们暂时不能使用这张表的读服务,这也就有可能影响到正常运行中的业务。如果此时我们使用主从库,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2、架构的扩展,业务量越来越大,单机无法满足高频率的I/O访问,此时做多库的存储,可以降低单个磁盘I/O访问的频率,从而提升效率。

既然我们使用到了主从库,那么我们就需要保证主从库的数据是一致的,这样无论系统读取哪一套 MySQL 的数据都可以保证结果是正确的,此时我们就需要用到主从复制了。

MySQL 主从复制

主从复制的概念很简单,他指的是数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点,说白了就是 CTRL+C、CTRL+V 。

MySQL主从复制是一个异步的复制过程,底层是基于 MySQL 数据库自带的二进制日志功能(也就是 Binlog)。就是一台或多台 MySQL 数据库从另一台 MySQL 数据库进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致(主从复制是 MySQL 数据库自带功能,我们无需借助第三方工具)。

接下来我们一起看看主从复制的原理👇

① master 服务器将数据的改变记录二进制 binlog 日志,当 master 上的数据发生改变时,则将其改变写入二进制日志中。

② slave 服务器会在一定时间间隔内对 master 服务器的二进制日志进行探测,判断其是否发生改变,如果发生改变,则开始一个 I/O Thread 请求 master 二进制文件内容。同时传送过来的信息,会记录到 http://master.info 中。

③ 同时主节点为每个 I/O 线程启动一个 dump 线程,用于向其发送二进制文件,并保存至从节点本地的中继日志(即Relaylog)中,接下来从节点启动 SQL 线程从中继日志中读取二进制日志并在本地重放,并且把应用过的内容记录到 http://relay-log.info 中,使得其数据和主节点的保持一致,最后 I/O Thread 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒。

在这里插入图片描述

MySQL 主从同步时,可以选择的 Binlog 模式有3种,分别是 statement、row、mixed。

  • statement: 会将对数据库操作的 sql 语句写入到 Binlog 中
  • row: 会将每一条数据的变化写入到 Binlog 中
  • mixed: statement 与 row 的混合。MySQL 决定什么时候写 statement 格式的,什么时候写 row 格式的 Binlog。

根据目前的实际情况来说,建议将 Binlog 模式设置为 ROW。因为现在随着固态硬盘的普及,磁盘 I/O 的性能得到大幅提升,在SSD加持下, I/O 成为瓶颈的可能性比较小,并且 ROW 模式的 Binlog 记录了完整的变更信息,在恢复数据上面将会很容易。即使我不消息误删了一行记录,我也可以通过 Binlog 捞回原来的所有字段信息,然后转变成 insert 进行插入;如果执行的是 update 语句,由于 ROW 模式的 Binlog 会完整记录修改前和修改后的整行数据,所以也可以很容易的进行恢复。语句如下👇

– 是将 mysql-bin.000001 文件中 position 在1000到1200字节之间的内容解析出来,放到 MySQL 中执行
mysqlbinlog /var/log/mysql/mysql-bin.000001 --start-position=1000 --stop-position=1200 | mysql -h127.0.0.1 -P3306 -u$ user -p$ pwd;

MySQL 主从配置步骤

🍓 主机配置 修改配置文件: vi /etc/my.cnf

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=ROW

🍓 从机配置 修改配置文件: vi /etc/my.cnf

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

🍓 重启主、从 MySQL 服务,并关闭防火墙

service mysqld restart

systemctl status firewalld.service

🍓 在主机上建立帐户并授权 slave

#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘%’ IDENTIFIED BY ‘slave’;

#查询master的状态,输出的内容在配置从机时会用到
show master status;

🍓 在从机上配置需要复制的主机

#复制主机的命令
CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’,
MASTER_USER=‘slave’,
MASTER_PASSWORD=‘slave’,
MASTER_LOG_FILE=‘mysql-bin.xxxx’,MASTER_LOG_POS=xxx;

#启动从服务器复制功能
start slave;

#查看从服务器状态(如果输出的 Slave_IO_Running、Slave_SQL_Running两个参数值都为YES,则说明我们配置成功了)
show slave status;

小结

本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇‍

希望各位小伙伴动动自己可爱的小手,来一波点赞+关注 (✿◡‿◡) 让更多小伙伴看到这篇文章~ 蟹蟹呦(●’◡’●)

如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。

你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西

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

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

相关文章

MYSQL性能分析

MYSQL性能分析 1.慢SQL查询 开启慢sql查询机制 set global slow_query_logon set global long_query_time2; set global log_queries_not_using_indexesonslow_query_log:慢查询log日志记录 on(开启)/off(关闭); long_query_time:SQL语句执行时间超过2…

Django学习 Day8

1.查询语句 主要目的是学习在ORM中使用条件查询 Filter(条件) 语法: MyModel.objects.filter(属性1值1,属性2值2) 作用:返回包含此条件的全部数据集 返回值:QuerySet容器对象,内部存放MyModel实…

元旦礼!2022年国家高新技术企业

​近日,2022年度第一批高新技术企业证书已正式发放。根据《高新技术企业认定管理办法》(国科发火〔2016〕32号)和《高新技术企业认定管理工作指引》(国科发火〔2016〕195号)有关规定,北京市高新技术企业认定…

项目实战之旅游网(七)后台分类管理 后台产品管理(上)

目录 一.后台分类管理 二.后台产品管理&#xff08;上&#xff09; 1.产品列表 2.新增产品 3.富文本编辑器 一.后台分类管理 mapper层&#xff1a; public interface CategoryMapper extends BaseMapper<Category> { } service层&#xff1a; Service Transactio…

什么是机器视觉计算机?

机器视觉是用于通过分析视频和图像帮助计算机做出决策的硬件和软件的集成。在制造业中&#xff0c;机器视觉通常用于生产线上&#xff0c;以便在产品的每个阶段进行自动检查。机器视觉还扩展了其在高端监控和安全、生物医学成像甚至视觉引导机器人、车辆中的应用。随着视觉技术…

“虚拟试衣间”项目可行性分析报告

目录 “虚拟试衣间”项目可行性分析报告 1 引言 1.1 标识 1.2 背景 1.3 项目概述 1.3.1 软件的基本描述 1.3.2 项目开发基本描述 1.3.3 投资方 1.4 文档概述 3 可行性分析的前提 3.1 项目的要求 一、功能 二、性能 三、输出 四、输入 五、基本数据流程和处理流程 六、安全与保…

如何从0开始画出一张优秀的架构图

你好&#xff0c;我是悟空。 最近在画项目的技术架构图&#xff0c;找到了一些不错的模板&#xff0c;分享给大家~ 画图工具&#xff1a;ProcessOn。 画图技巧&#xff1a;如何从0开始画出一张优秀的架构图 文末再送 5 本书给大家&#xff01; 业务架构图 定义&#xff1…

深圳东方英文书院顺利通过IB五年评估

2021年12月中旬&#xff0c;国际文凭组织&#xff08;IB&#xff09;正式发布官方的评估报告&#xff0c;我院国际小学第一个五年评估顺利通过&#xff01;书院整个社区一片欢腾&#xff01; 何为IB五年评估&#xff1f;为什么它对我们这么重要&#xff1f;不通过会怎么样&…

六十天训练总结

终于啊&#xff0c;六十天说长不长说短不短&#xff0c;但是按时坚持下来的人也确实是少&#xff0c;非常高兴自己能够做到打卡标语的那样&#xff08;完美坚持&#xff09; 要总结的话&#xff0c;东西还是很多的 开了个目录来存放各个题目&#xff0c;并且道题目都有自己看来…

远程桌面控制工具---NoMachine踩坑记录

NoMachine for mac是一款免费的远程桌面访问工具&#xff0c;这款软件的连接到远程桌面后延迟可以非常低&#xff0c;NX协议在高延迟低带宽的链路上提供了近乎本地速度的响应能力&#xff0c;打破空间和时间的障碍&#xff0c;让您的桌面环游世界。 1.环境配置 服务端&#x…

客快物流大数据项目(一百零一):实时OLAP开发

文章目录 实时OLAP开发 一、实时ETL处理 二、SparkSQL基于DataSourceV2自定义数据源

ABAP Function ALV 使用教程

Function ALV 是实现最简单,使用频率最高的报表 使用Function ALV的关键就是调用SAP标准的程序 REUSE_ALV_LIST_DISPLAY 简单实现: 生成报表 示例代码&#xff1a; REPORT ZABAP_FUNCTION_ALV.DATA gt_itab TYPE TABLE OF SFLIGHT.SELECT * FROM SFLIGHT INTO TABLE gt_it…

线程数,512是否合理?

Web-Server有个配置&#xff0c;工作线程数。Service一般也有个配置&#xff0c;工作线程数。经验丰富的架构师&#xff0c;懂得如何配置这些参数&#xff0c;使得系统的性能达到最优&#xff1a;有些业务设置为CPU核数的2倍&#xff0c;有些业务设置为CPU核数的8倍&#xff0c…

Sringboot2整合shiro实现登录认证和记住我功能

Sringboot2整合shiro实现及登录认证和记住我 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生…

resolution-robust large mask inpainting with fourier convolutions

Resolution-robust Large Mask Inpainting with Fourier Convolutions(2021)_studyeboy的博客-CSDN博客_分辨率稳健的大掩膜修复[Paper] Resolution-robust Large Mask Inpainting with Fourier Convolutions(2021)[Code]saic-mdal/lama基于傅里叶卷积的分辨率稳健的大型掩码修…

数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

文章目录引言&#xff1a;1.归并排序(MergeSort)2.快速排序的优化&#xff08;顶级优化&#xff09;3.快速排序的三种思路的代码实现及分析4.归并排序和快排第3原理的测试引言&#xff1a; 刚刚去回顾了一下递归实现的几个小代码&#xff0c;感觉递归真的是很神奇的一个东西&a…

C# StringBuilder

StringBuilder位于命名空间System.Text下&#xff0c;使用前需引入 using System.Text; StringBuilder的构造 new StringBuilder(string value) StringBuilder sb1 new StringBuilder("www.abc.com"); 利用构造函数创建一个值为“www.abc.com”的StringBuilder…

解决Ubuntu不能上网以及无法远程连接Ubuntu

本文环境 物理机OS&#xff1a; Windows10 专业版 虚拟机平台&#xff1a; VMware Workstation 16 Pro 虚拟机OS&#xff1a; Ubuntu 20.04 相信大家在使用Ubuntu中也有遇到不能上网&#xff0c;我也是尝试了很多的方法都不行&#xff0c;终于找到了一种可行的方法。 步骤…

测试开发应该具备的六大能力

前言 前几天一个前同事找我聊了个问题&#xff1a;一个好的测试开发同学需要具备哪些能力&#xff1f;我思考了一下&#xff0c;给了他如下答复&#xff1a; 从我工作中接触到的测试开发&#xff0c;以及面试测试开发候选人时问的问题&#xff0c;我将自己对测试开发这个岗位…

Chrome插件开发

1.什么是 Chrome 插件 谷歌浏览器插件是一种小型的定制浏览器体验的程序&#xff0c;通过插件可以自定义浏览器的一些行为来适合个人的需求&#xff0c;例如上面的查看服务器状态插件。 在应用商店中下载下来的插件基本上都是以.crx 为文件后缀&#xff0c;该文件其实就是一个…