Mysql 8.0 主从复制及读写分离搭建记录

news2024/11/14 10:37:03

前言

搭建参考:搭建Mysql主从复制

为什么要做主从复制?

  1. 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  2. 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
  3. 读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
  4. 使数据在地理位置上更接近用户,从而降低访问延迟。(游戏分西南大区 华南大区 北部大区等)

Mysql支持三种主要的二进制日志(binlog)格式

1、STATEMENT:基于语句的复制

记录导致数据更改的SQL语句。这种方式效率较高,因为它只需记录执行的语句,但是可能在某些情况下(如使用函数或非确定性操作)导致数据不一致。

  • 优点:效率高
  • 缺点:数据一致性存在问题
    例如:update xxx set time=now() where id=1

2、ROW:基于行的复制

记录实际更改的数据行。这种方式提供了最高的数据一致性,因为它是基于数据更改的,而不是执行的语句。适合所有情况,尤其是当复制环境中存在复杂的SQL或者函数操作时。

  • 优点:数据一致性强
  • 缺点:性能低
    例如:存在一个表,要更新其中10万条数据,那么就会造成十万条记录被写入binary.log日志,造成性能和空间的浪费。

3、MIXED:混合类型的复制

MySQL会根据情况自动选择STATEMENT或ROW模式来记录日志。对于不涉及非确定性函数的简单更新,它可能使用STATEMENT格式;而对于可能引起问题的语句,则使用ROW格式。

Mysql主从复制的实现方式

1、异步复制(Asynchronous Replication)

这是最基础的复制模式,主服务器提交事务后立即返回,而不等待从服务器确认。这种方式下,主从之间的数据延迟可能较大,但写入性能最高。

2、半同步复制(Semi-Synchronous Replication)

MySQL 5.5 引入了半同步复制,在MySQL 8.0 中进一步完善(增强半同步)。在半同步模式下,主服务器必须等待至少一个从服务器确认收到二进制日志事件后才能提交事务。这样保证了至少有一个副本有最新的数据,但可能会影响写入性能。
注:
MySQL 中的增强半同步配置具有一个参数rpl_semi_sync_master_timeout,它定义了主数据库等待备库确认的超时时间。如果超过这个超时时间,主数据库将切换到异步复制模式。

3、完全同步复制(Fully Synchronous Replication):

在某些配置中,可以实现所有从节点都确认后主节点才提交,但这通常会导致写性能显著下降。

主从复制的工作过程

  1. 主节点开启二进制日志,从节点开启中继日志。

  2. Master 节点将数据的改变记录成二进制日志(bin log) ,当Master上的数据发生改变时(增删改),则将其改变写入二进制日志中。

  3. 从节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求主节点的二进制事件。(请求二进制数据)

  4. 同时主节点为每个I/O线程启动一个dump线程,用于通知和向其发送二进制日志,I/O线程接收到bin-log内容后,将内容保存至slave节点本地的中继日志(Relay log)中

  5. 从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成sql 语句逐一执行,使得其数据和主节点的保持一致。最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。
    在这里插入图片描述

1、三个线程

  • dump线程:由主数据库开启,用于读取主的二进制日志并传输给从数据库 。用于监听 I/O线程 请求将二进制日志更新的数据发送给slave的I/O 线程
  • io线程:由从数据库开启,用于接收二进制日志并保存为中继日志。
  • sql线程:由从数据库开启,用于将中继日志写入备数据库中完成主从复制。

2、二个日志

  • 中继日志(relay log)只在主从服务器架构的从服务器上存在。从服务器(slave)为了与主服务器(Master)保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。

搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下。

  • 中继日志格式
    文件名的格式是:从服务器名 - relay-bin.序号。中继日志还有一个索引文件:从服务器名 - relay-bin.index,用来定位当前正在使用的中继日志。

主从数据库同步

1、主库数据导出

#所有表只读
FLUSH TABLES WITH READ LOCK; 
#导出所有数据库
mysqldump --all-databases --master-data -u 用户名 -p > dbdump.sql
#释放读锁
UNLOCK TABLES;

2、从库还原

#登录mysql,关闭IO线程
STOP REPLICA IO_THREAD;
#命令行执行导入操作
mysql -u root -p < dbdump.sql
#再次登录mysql,开启IO线程
START REPLICA IO_THREAD;

主从复制的问题及解决方案

Master宕机时,数据丢失问题

使用半同步复制方案,可以解决主库宕机造成的数据丢失问题。参考链接:半同步复制

读写分离方案

1、基于dynamic-datasource-spring-boot-starter实现

此插件基于Mybatis拦截实现,通过判断MappedStatement的SqlCommandType,如果为SELECT,则操作从库,否则操作主库。

@Bean
public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin(){
    return new MasterSlaveAutoRoutingPlugin();
}

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

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

相关文章

PID控制中积分项目的理解,消除稳态误差的作用,表示着过去(PID积分控制)

1&#xff0c;消除稳态误差 积分项目是对于历史误差进行的累积&#xff0c;可以理解&#xff0c;系统的误差累积表示不断的在减少误差&#xff0c;最终消除误差&#xff0c;这个过程需要将误差进行累加&#xff0c;才可以真正知道误差的大小是多少&#xff0c;用最终累加的误差…

C++模板方法模式

文章目录 1. 定义抽象基类&#xff08;Abstract Class&#xff09;2. 实现具体子类&#xff08;Concrete Class&#xff09;3. 使用模板方法模板方法模式的优点模板方法模式的应用场景注意事项实现示例抽象类&#xff08;模板&#xff09;具体实现类客户端代码 总结 模板方法模…

期望薪资25K,新浪微博测试4轮面试,没想到过了。。

一面60min 1、离职原因 2、简单的算法题&#xff0c;就是我会什么让写什么&#xff1a; 冒泡排序&#xff0c;二分查找&#xff08;其实这么简单&#xff0c;我还是在指引下写出来的&#xff0c;自己实在太菜&#xff09; 3、简历问答&#xff08;随机抽几个点问&#xff0…

MySQL数据库语法(二)

一、数据库的创建 创建数据库CRATE DATABASE语法&#xff1a;CREATE DATABASE [IF NOT EXISTS]数据库名;功能&#xff1a;用给定的名字创建一个数据库如果数据库已经存在&#xff0c;发生一个错误。查看创建数据库&#xff1a;SHOW CREATE DATABASE <数据库名>&#xff…

Oracle数据库操作问题汇总

一、简介 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统&#xff0c;系统可移植性好、使用方便、功能强&…

【数据结构】快速排序(详解)

目录 快速排序 历史&#xff1a; 基本思想&#xff1a; 主框架&#xff1a; 下面解释实现单次排序的几种版本&#xff1a; 1.Hoare版本 2. 挖坑法 3. 前后指针法 快速排序的实现包括递归与非递归&#xff1a; 1. 递归实现&#xff1a;&#xff08;即开头的基本框架&am…

工程机械比例阀电流采集方案——IPEhub2与IPEmotion APP

自从国家实施一带一路和新基建计划以来&#xff0c;工程机械的需求量呈现出快速增长的趋势。而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置——在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0…

KEIL5鼠标右键查找定义或声明选项变灰色不可选

原因&#xff1a;我直接点的KEIL图标打开了昨天的工程 解决办法&#xff1a;关掉工程&#xff0c;重新从文件夹的路径打开 其他原因导致试试以下方法&#xff1a; 1.快捷键F12导航到目标位置 2.路径不能含有中文&#xff0c;改好后&#xff0c;shiftAltf12&#xff0c;更新搜索…

疑惑点:动作监听时this的含义:可以理解为接口的多态

全部代码&#xff1a; package test;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random;public class test3 extends JFrame implements ActionListener {JButton jb1 new JButton("你点我啊&am…

纽曼硬盘隐藏文件丢失怎么恢复?介绍几种有效的方法

纽曼硬盘作为存储设备中的佼佼者&#xff0c;以其高性能和稳定性受到了广大用户的青睐。然而&#xff0c;在使用过程中&#xff0c;有时我们可能会遇到一些意想不到的问题&#xff0c;比如隐藏文件的丢失。这对于依赖这些文件进行工作或生活的人来说无疑是一个巨大的困扰。那么…

香橙派AI Pro测评--ROS及激光SLAM

文章目录 前言一、外形与质感二、软件测评1. 系统界面2. ROS安装3. ROS节点测试4. SLAM算法测试 总结 前言 今天刚收到了官方寄来的“香橙派 AI Pro”开发板&#xff0c;这篇文章将会对香橙派 AI Pro的外形、质感、运行速度进行一个测评&#xff0c;然后我会在这个开发板上安装…

四步简单操作:轻松将iCloud照片恢复到相册

随着智能手机的普及&#xff0c;我们的生活中越来越多的照片存储在了云端&#xff0c;其中iCloud提供了便捷的照片备份和存储服务。但有时候&#xff0c;我们可能会不小心删除了在iCloud上的照片&#xff0c;或者想要将iCloud中的照片恢复到手机相册中。 在这篇文章中&#xf…

I.MX6ULL Linux 点灯实验理论及汇编点灯

系列文章目录 I.MX6ULL Linux C语言开发 I.MX6ULL Linux 点灯实验理论 系列文章目录一、I.MX6ULL GPIO二、I.MX6ULL IO 命名三、I.MX6ULL IO 复用四、I.MX6ULL IO 配置五、I.MX6ULL GPIO 配置六、I.MX6ULL GPIO 时钟使能七、硬件原理分析八、实验程序编写 一、I.MX6ULL GPIO 一…

flutter 的webview中touchstart和touchend 执行异常问题解决

效果 背景 使用flutter 调用webview内网页&#xff0c;网页内容是监听touchstart和 touchend&#xff0c;触发不同是事件&#xff0c;但是发现每次长按都 手指抬起后 才会执行 touchstart和touchend&#xff0c;满足不了我的需求&#xff0c;我的需求是当手指按下 立即执行touc…

aws emr启动standalone的flink集群

关键组件 Client&#xff0c;代码由客户端获取并做转换&#xff0c;之后提交给JobMangerJobManager&#xff0c;对作业进行中央调度管理&#xff0c;获取到要执行的作业后&#xff0c;会进一步处理转换&#xff0c;然后分发任务给众多的TaskManager。TaskManager&#xff0c;数…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配&#xff0c;要么是找不到&#xff0c;要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

操作系统实验--终极逃课方法

找到图片里的这个路径下的文件 &#xff0c;结合当前题目名称&#xff0c;把文件内容全部删除&#xff0c;改为print print的内容为下图左下角的预期输出的内容

Databend 开源周报第 146 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持 Expressio…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接&#xff1a;Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…