当前位置: 首页 > news >正文

浅谈MySQL主从复制

目录

1.MySQL主从复制是什么

2.MySQL主从复制的意义

3.MySQL主从复制原理

4.数据同步一致性问题

5.实现方式


1.MySQL主从复制是什么

MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。

MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新数据,数据更新可以仅复制特点的数据库、表等。

2.MySQL主从复制的意义

1)为了实现读写分离,让主服务器负责写,从服务器负责读。这样可以保证当主库更新数据进行锁表时也可以读取数据。主从复制是读写分离的前提。

2)做数据的热备。可以备份数据。当主节点挂掉了,还可以访问从节点的数据。

3)降低磁盘的I/O访问频率,提高单个机器的I/O性能。

3.MySQL主从复制原理

简单来说,MySQL主从复制主要依靠两个二进制文件:Binary Log和Relay log,还有两个进程:I/O Thread和SQL Thread实现。

如下图所示:

当主服务器(master)发生数据更新时,会将其(data changes)写入Binary log的日志文件中;从服务器(slave)会定时对Binary log进行探测,判断其是否发送改变:如果改变,则启动从服务器中的 I/O Thread线程,读取Binary log文件中的内容,并将其写入至自己的Relay log日志文件中;然后使用SQL thread读取Relay log中的内容,最后进行replay,逐一解析为sql语句执行,复制数据库数据。过程完成后,I/O Thread和SQL thread进入休眠,直至下一次唤起。

关于Binary log记录的data changes,有以下两种类型选择:

  • statement:每一条数据更新都会记录到binary log中。(即记录sql语句)
  • row:基于行的复制,仅记录哪条记录被修改了,修改成什么样。(即记录数据的修改行为)

4.数据同步一致性问题

由于网络传输中会存在主从延迟,可能会导致用户从从服务器上读取的数据不是主服务器上最新的数据的问题,即主从同步中的数据不一致性问题。从数据一致性弱到强,有以下三种方式:

  • 异步复制:主服务器执行事务后直接提交,不等待从服务器的确认通知。(数据一致性较弱,主服务器提交时刻t1到从服务器复制完成时刻t2之间读取数据,就会存在一致性问题)
  • 半同步复制:主服务器执行事务后等待至少一个从服务器接收到了binary log并写入中继日志后后,得到确认通知(ack)后认为写操作完了,再返回给客户端。
  • 组复制:基于Paxos协议的状态机复制。即将多个节点组成一个复制组。在执行读写事务时,需要一致性协议层的同意(即同意的节点数>N/2 +1),才可以提交;在执行只读事务时则不需要经过组内同意。

5.实现方式

本次案例以linux操作系统为例:

首先,需要准备两个ip地址,分别安装同一版本的MySQL。否则,进行数据复制时可能会导致错误。

服务器ip地址mysq版本
master192.168.0.200:33065.7
slave192.168.0.201:33065.7

(1)进入主数据库,创建用户,并且给该用户(seven)授予REPLICATION SLAVE权限

GRANT REPLICATION SLAVE ON *.* to 'seven'@'%' identified by 'Root@123456';

修改配置文件(在/conf/my.cnf文件):

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
## 设置server_id, 同一个局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

(请注意server_id唯一;修改完成后重启mysql)

进入Mysql master,记录以下数据:

 (2)进入从服务器,修改配置:

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
## 设置server_id, 同一个局域网内需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置只读(具有super权限的用户除外)
read_only=1

(server_id必须不一致,同理,配置完成后重启mysql)

然后,在从服务器中设置主库地址及同步位置:

change master to master_host='masterd的ip',master_user='刚刚创建的用户名',master_password='Root@123456',master_log_file='masterd的file(show master status中查得)',master_log_pos=154;

参数说明:

  • master_host : 主数据库的IP地址
  • master_user : 访问主库进行主从复制的用户名(上面创建并赋予slave权限的)
  • master_password : 访问主库进行主从复制的用户名对应的密码(请注意密码对应)
  • master_log_file : 从哪个日志文件开始同步
  • master_log_pos : 从指定日志文件的哪个位置开始同步

(注意:master_log_file和master_log_pos的值都为刚刚截图记录的值)

最后,在从服务器开启主从复制:

 start slave;

主从复制即成功。

(3)我们可以在从机查看主从复制状态:

show slave status \G

 Slave_IO_Running和Slave_SQL_Running两个参数都为yes,即成功。

相关文章:

浅谈MySQL主从复制

目录 1.MySQL主从复制是什么 2.MySQL主从复制的意义 3.MySQL主从复制原理 4.数据同步一致性问题 5.实现方式 1.MySQL主从复制是什么 MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式,这样从节点不用一直访…...

docker-compose安装kafka和php简单测试

docker-compose.yml内容: version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …...

【蓝桥云课】快速幂

问题描述:快速求aba^bab 方法一:常规方法相乘a∗a∗a∗a∗...∗aa*a*a*a*...*aa∗a∗a∗a∗...∗a 方法二:分治方法求aba^bab ab{1,b0a,b1ab2⋅ab2,b为偶数ab−12⋅ab12,b为奇数a^b\begin{cases} 1& \text{,b0}\\ a& \text{,b1}\\ a…...

解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题

网上关于wxPython安装失败,安装速度过慢,以及安装成功后PyCharm中import wx仍然爆红的文章有很多,也特别杂,解决起来特别困难,今天在这里对问题的处理进行一个整合,希望能帮助到大家。 安装wxPython这里运用…...

封装小程序request请求[接口函数]

在这篇小程序API的Promise化文章中讲到小程序官方提供的异步API都是基于回调函数来实现的,在大量的使用这种回调函数就会造成回调地狱的问题,以及代码的可读性和可维护性差,通过对小程序API的Promise化能解决,那么本篇是来讲进行对…...

嵌入式 STM32 通讯协议--MODBUS

目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议 二、MODBUS通信协议 1、概述 2、MODBUS帧结构 协议描述 3、MODBUS数据模型 4、MODBUS事务处理的定义 5、MODBUS功能码 6、功能码定义 7、MODBUS数据链路层 8、MODBUS地址规则 9、MO…...

互联网人看一看,这些神器你用过哪些?

很多小伙伴在剪辑视频的过程中经常可以看到一些语音素材,经常刷视频的小伙伴也可以看到很多视频中经常出现一些AI合成的声音或者音效,这些配音可以给视频增添很多亮点!那么大家都是怎么将文字转语音的呢?今天给大家分享5款非常专业…...

Kotlin学习:5.2、异步数据流 Flow

Flow一、Flow1、Flow是什么东西?2、实现功能3、特点4、冷流和热流5、流的连续性6、流的构建器7、流的上下文8、指定流所在协程9、流的取消9.1、超时取消9.2、主动取消9.3、密集型任务的取消10、背压和优化10.1、buffer 操作符10.2、 flowOn10.3、conflate 操作符10.…...

EPICS synApps介绍

一、synApps是什么? 1) 一个用于同步束线用户的EPICS模块集合。 2) EPICS模块 alive, autosave, busy, calc, camac, caputRecorder, dac128V, delaygen, dxp, ip, ip330, ipUnidig, love, mca, measComp, modbus, motor, optics, quadEM,…...

Pycharm和跳板机 连接内网服务器

Pycharm和跳板机 连接内网服务器 建立配置文件 本地配置 .ssh 文件夹下配置 config 文件 Host jumpHostName xxxPort 22User xxxServerAliveInterval 30IdentityFile C:\Users\15284\.ssh\id_rsa # 通过密钥连接Host server # 同样,任意名字,随…...

mysql去重查询的三种方法

文章目录前言一、插入测试数据二、剔除重复数据方法1.方法一:使用distinct2.方法二:使用group by3.方法三:使用开窗函数总结前言 数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介…...

PHP反序列化

文章目录简介POP链构造和Phar://题目[CISCN2019 华北赛区 Day1 Web1]Dropbox字符串逃逸简介 php序列化的过程就是把数据转化成一种可逆的数据结构,逆向的过程就叫做反序列化。 php将数据序列化和反序列化会用到两个函数: serialize 将对象格式化成有序的…...

什么蓝牙耳机打电话效果最好?通话效果好的无线蓝牙耳机

2023年了,TWS耳机虽说近乎人手一只了,但用户换新的需求和呼声依然热火朝天,因为我们想要听音乐、刷视频的时候都得准备,下面整理一些通话效果不错的耳机品牌。 第一款:南卡小音舱蓝牙耳机 动圈单元:13.3m…...

Tesseract centos环境安装,基于springboot图片提取文字

下载tesseract-orc https://github.com/tesseract-ocr/tesseract/tags下载leptonica wget http://www.leptonica.org/source/leptonica-1.78.0.tar.gz解压leptonica tar -xvf leptonica-1.78.0.tar.gz 配置编译安装leptonica 进文件夹 ./configure make make install安装aut…...

Elasticsearch7.8.0版本优化——写入速度优化

目录一、 写入速度优化的概述二、如何写入速度优化2.1、 批量数据提交2.2、 优化存储设备2.31、 合理使用合并2.4、 减少 Refresh2.5、 加大 Flush2.6、 减少副本的数量一、 写入速度优化的概述 ES 的默认配置,是综合了数据可靠性、写入速度、搜索实时性等因素。实使…...

【Redis】Redis主从同步中数据同步原理

【Redis】Redis主从同步中数据同步原理 文章目录【Redis】Redis主从同步中数据同步原理1. 全量同步1.1 判断是否第一次数据同步2. 增量同步3. 优化Redis主从集群4. 总结1. 全量同步 主从第一次同步是全量同步。 数据同步包括以下三个阶段: 在从节点执行slaveof命令…...

Python基础—while循环

(1)while循环&#xff1a; 语法格式&#xff1a; while 条件&#xff1a;   执行语句1……   执行语句2…… 适用条件&#xff1a;无限循环 死循环 while True:print(条件是真的&#xff01;)代码实例&#xff1a; i 0 # 创建一个计数的变量 while i < 5: # Truepr…...

linux基础(管道符,检索,vim和vi编辑使用)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…...

GAN | 代码简单实现生成对抗网络(GAN)(PyTorch)

2014年GAN发表&#xff0c;直到最近大火的AI生成全部有GAN的踪迹&#xff0c;快来简单实现它&#xff01;&#xff01;&#xff01;GAN通过计算图和博弈论的创新组合&#xff0c;他们表明&#xff0c;如果有足够的建模能力&#xff0c;相互竞争的两个模型将能够通过普通的旧反向…...

华为面试题就这?00后卷王直接拿下30k华为offer......

先说一下我的情况&#xff0c;某211本计算机&#xff0c;之前在深圳那边做了大约半年多少儿编程老师&#xff0c;之后内部平调回长沙这边&#xff0c;回来之后发现有点难&#xff0c;这边可能是业绩难做&#xff0c;虚假承诺很厉害&#xff0c;要给那些家长虚假承诺去骗人家&am…...

Android Git客户端MGit:移动端代码管理的终极解决方案

Android Git客户端MGit&#xff1a;移动端代码管理的终极解决方案 【免费下载链接】MGit A Git client for Android. 项目地址: https://gitcode.com/gh_mirrors/mg/MGit 在移动开发时代&#xff0c;随时随地管理代码仓库已成为开发者的核心需求。MGit作为Android平台上…...

http-equiv属性有哪些常用值_meta模拟HTTP头汇总【详解】

真正有用且被主流浏览器一致支持的http-equiv值仅有Content-Type、Refresh和Content-Security-Policy&#xff1b;其中Content-Type仅在无meta charset时降级生效&#xff0c;Refresh存在历史记录破坏与用户交互限制&#xff0c;CSP则能力弱于响应头且不支持nonce等关键特性。哪…...

Windows下用Anaconda搞定CycleGAN复现:从环境配置到训练测试的保姆级避坑指南

Windows下Anaconda环境复现CycleGAN全流程实战指南 当第一次接触CycleGAN时&#xff0c;我被它无需配对数据就能实现图像风格转换的能力所震撼。但随之而来的环境配置问题却让许多初学者望而却步——特别是当你的主力机是Windows系统时。本文将带你避开我踩过的所有坑&#xf…...

Ansys Mechanical脚本踩坑实录:从‘材料赋值失败’到‘自动网格划分’的避坑指南

Ansys Mechanical脚本实战避坑指南&#xff1a;从报错到精通的进阶之路 第一次在Ansys Mechanical中尝试脚本自动化时&#xff0c;那种挫败感我至今记忆犹新。明明按照教程一字不差地输入代码&#xff0c;却频频遭遇"对象只读"、"材料不识别"等错误提示。作…...

嵌入式C代码如何喂饱轻量级大模型?:揭秘ARM Cortex-M7上LLM推理延迟从2800ms压至197ms的7个关键编译器指令级优化

第一章&#xff1a;嵌入式C语言与轻量级大模型适配性能调优指南在资源受限的嵌入式设备&#xff08;如 Cortex-M7、ESP32-S3 或 RISC-V MCU&#xff09;上部署轻量级大模型&#xff08;如 TinyLlama、Phi-3-mini、TinyBERT&#xff09;时&#xff0c;C语言仍是底层推理引擎的核…...

real-anime-z从零部署:基于Xinference的GPU算力优化实战教程

real-anime-z从零部署&#xff1a;基于Xinference的GPU算力优化实战教程 1. 项目简介 real-anime-z是一款基于Z-Image LoRA技术开发的真实动画风格图片生成模型。这个开源项目通过Xinference框架提供高效的模型服务&#xff0c;并集成了Gradio作为用户友好的Web界面。本文将带…...

ComfyUI-Impact-Pack架构揭秘:AI图像生成中的模块化与可扩展性设计

ComfyUI-Impact-Pack架构揭秘&#xff1a;AI图像生成中的模块化与可扩展性设计 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地…...

别再让二极管拖慢你的电路!手把手教你选对快恢复二极管(附型号推荐)

高频电路设计中的二极管选型实战指南&#xff1a;从反向恢复时间到效率优化 在开关电源和电机驱动电路的设计中&#xff0c;工程师们常常会遇到一个令人头疼的问题——明明精心计算了所有参数&#xff0c;电路效率却始终达不到预期。你可能已经优化了MOSFET的驱动、精心设计了P…...

树、森林——树和森林的遍历(森林的遍历)

森林由多棵互不相交的树组成&#xff0c;遍历规则&#xff1a;按树的顺序依次遍历每一棵树 森林同样没有中序遍历&#xff0c;只有两种&#xff1a; 1. 森林先序遍历 访问第一棵树的根结点 先序遍历第一棵树的所有子树 依次先序遍历剩下所有树 对应关系&#xff1a;森林先序遍历…...

Flutter音频开发避坑指南:just_audio插件在iOS/Android平台上的常见问题与解决方案

Flutter音频开发避坑指南&#xff1a;just_audio插件在iOS/Android平台上的常见问题与解决方案 在跨平台音频开发领域&#xff0c;Flutter的just_audio插件因其简洁的API和强大的功能而备受青睐。然而&#xff0c;正如许多开发者所经历的那样&#xff0c;当项目从Demo阶段迈向生…...