首页 > 数据库 >mysql主从复制

mysql主从复制

时间:2023-06-01 14:26:30浏览次数:56  
标签:主库 binlog 主从复制 提交 mysql commit 日志 从库

mysql主从复制

mysql主从复制的分类

全同步复制

在全同步复制中,主库( master )写数据到二进制日志( binlog )且同步( sync ) ,所有从库请求二进制日志( slave request binlog )后写入中断日志( relay-log )并flushdisk,并且应用完日志且commit 。

理解︰当主提交一个事务,在主库向前端业务请求返回一个commit成功的指令前,必须保证所有的从已经提交了这个事务(所有从库不但接收了,还必须应用该事务日志)

 

优点︰数据不会丢失 缺点:会阻塞master session,性能太差,非常依赖网络 代表︰MySQL-Cluster

 

半同步复制

在半同步复制中,主库( master )写数据到二进制日志文件( binlog )且sync,且提交( commit ) ,然后一直等待确认(ACK )。当至少一个从库请求二进制日志( slave request binlog )后写入到中断日志( relay-log)并flush disk,就返回确认( ACK )(不需要回放应用完日志)

 

优点:会有数据丢失风险(低) 缺点:会阻塞master session,性能差,非常依赖网络,代表: after commit,原生的半同步

 

主库上客户端发出提交commit指令,且提交( commit ),事务写入到了binlog,即lnnoDB commit三段提交的c阶段write commit log完成后,然后等待从库给主库反馈一个确认ack,只有等到从库确认后,master才会把事务提交到存储引擎且返回到client—个commit成功的指令

 

 

无损复制

主库上客户端发出提交commit指令,但未提交(等待提交),即InnoDB commit三段提交的B阶段sync binlog完成后,然后等待从库给主库反馈一个确认ack , 只有等到从库确认后,master才会把事务提交到存储引擎且返回到client一个commit成功的指令。

数据库已提交事务,但是事务还没有执行,将二进制日志同步到从库,从库收到二进制日志,返回给主库, 主库才能执行事务,更新数据。

 

异步复制

在异步复制中,主库( master )写数据到二进制日志( binlog )且同步( sync ) ,从库请求二进制日志( slave request binlog )后写入(中断日志) relay-log并flush disk(持久化到了磁盘的relay.log中)

理解∶主库将事件写入binlog,提交事务,自身并不知道从库是否接收是否处理;

优点∶复制的性能最好 缺点: master挂掉后,slave可能会丢失事务 代表: MySQL原生的复制

 

 

 

 

标签:主库,binlog,主从复制,提交,mysql,commit,日志,从库
From: https://www.cnblogs.com/lzjloveit/p/17448768.html

相关文章

  • MySQL视图
    一:视图概述1:为什么使用视图视图可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别......
  • Navicat远程链接mysql数据库问题
    问题描述:docker安装mysql数据后使用Navicat链接mysql后,创建数据库报“1044-Accessdenidforuser'root'...”解决方案:1.登录远程服务器,进入mysql容器dockerexec-itmysql/bin/bash2.mysql-uroot-p->grantallprivilegeson*.*to'root'@'%';->flush......
  • 创建,增加,删除mysql表分区
    http://www.2cto.com/database/201503/380348.htmlhttps://wenku.baidu.com/view/629d6cf4ddccda38366baf57.htmlMySQL的表分区详解-查看分区数据量,查看全库数据量 SELECTpartition_namepart,partition_expressionexpr,partition_descriptiondescr,table_rows......
  • Mysql的存储过程
    一.存储过程的定义:存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。二. 存储过程的优点:简化应用开发人员的工作。当用不同语言编写多客户......
  • mysql重复记录处理
    这里记录一下用到的语句和语句模板:--查询出重复的数据SELECTCOUNT(*)asrepeats,address,signer_name,signer_mobileFROMuser_operation_useraddressGROUPBYaddress,signer_name,signer_mobileHAVINGrepeats>1;--查询出重复的数据中最小的idSELECTMIN(......
  • 高频面试题|如何解决MySQL主从复制延时问题
    作者:楼仔来源:https://mp.weixin.qq.com/s/Jfrp-pLH_nfzKzwU-6gY5w这篇文章是去年写的,但是阅读量很低,不想让好的文章被埋没,重新整理后,可读性更强,文末有上周六技术派直播视频。MySQL主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多。比如我之前面试小米,就被问......
  • MySQL数据库10秒内插入百万条数据
    publicclassBaseDao{//静态工具类,用于创建数据库连接对象和释放资源,方便调用//导入驱动jar包或添加Maven依赖(这里使用的是Maven,Maven依赖代码附在文末)static{try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(Cla......
  • C#中通过连接池连接mysql数据库
       使用连接池可以提高C#程序连接MySQL数据库的性能,使得不必每次建立新的物理连接。 usingSystem.Data;usingMySql.Data.MySqlClient;namespaceConsoleApp1{classProgram{privateconstintMAX_POOL_SIZE=100;//设置最大连接数......
  • jmeter--连接mysql数据库
    本文讲解一下,如果用jmeter连接数据库。一般平常工作中使用jmeter连接数据库的作用主要包括:本身对数据库进行测试(功能、性能测试)时会需要使用jmeter连接数据库功能测试时,测试出来的结果需要和数据库中的数据进行对比是否正确一致。这时候可以通过jmeter连接数据查询出来数据,然......
  • 简单封装一下pymysql库
      简单封装一下pymysql库my_pymysql.py#!/bin/python#-*-coding:utf-8-*-importpymysqlimportnumpydefget_connect(**kwargs):mysqldb=pymysql.connect(host=kwargs.get('host'),user=kwargs.get('user'),passw......