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

mysql 主从复制 原理

时间:2023-06-10 16:34:31浏览次数:54  
标签:主从复制 数据库 复制 mysql 原理 数据 节点

 

mysql 主从复制定义

mysql 主从复制是一种数据同步的技术,它可以让一个或多个从数据库(slave)复制主数据库(master)的数据变化。这样可以提高数据库的可用性、性能和扩展性,也可以实现读写分离和数据备份。

mysql 主从复制原理

mysql 主从复制的原理是基于二进制日志(binlog)的,主数据库在执行数据更新的操作时,会把操作记录到 binlog 文件中,并通过 binlog dump 线程发送给从数据库。从数据库有两个线程负责接收和执行主数据库的操作,分别是 I/O 线程和 SQL 线程。I/O 线程负责连接主数据库,请求并接收 binlog 事件,并保存到本地的中继日志(relay log)中。SQL 线程负责读取中继日志中的事件,并在从数据库中重放,从而实现数据的同步。

mysql 主从复制有不同的同步策略,主要有以下几种:

  • 同步策略:主数据库会等待所有的从数据库都回应后才会提交事务,这样可以保证强一致性,但是会严重影响性能和可用性。
  • 半同步策略:主数据库至少会等待一个从数据库回应后才会提交事务,这样可以保证至少一个从数据库和主数据库是一致的,但是仍然有可能出现数据丢失或不一致的情况。
  • 异步策略:主数据库不用等待从数据库的回应就可以提交事务,这样可以提高性能和可用性,但是会牺牲一致性,可能出现数据延迟或丢失的情况。
  • 延迟策略:从数据库可以设置一个延迟时间,让自己落后于主数据库一定的时间,这样可以避免一些误操作或攻击对数据造成的影响,也可以用于备份或审计的目的。

 

mysql 主从复制有哪些应用场景?

MySQL 主从复制有以下几种应用场景:

  • 数据备份:主从复制可以实现数据的热备份,即从节点可以实时地同步主节点的数据变化,提高数据的可靠性和安全性。但是,主从复制不能防止人为的误操作,如删除或修改数据,因此还需要定期的全量备份或者使用延迟复制等策略。
  • 读写分离:主从复制可以实现读写分离,即主节点负责写操作,从节点负责读操作,分担服务器的负载压力。读写分离可以提高数据库的并发能力和响应速度,尤其是在读多写少的场景下。读写分离可以通过程序或者代理软件来实现。
  • 业务拆分:主从复制可以实现业务拆分,即根据不同的业务需求,将不同的从节点分配给不同的用户或者服务。例如,有些从节点可以提供外部用户的查询服务,有些从节点可以用于内部数据分析或者开发测试,有些从节点可以用于数据备份或者故障恢复等。这样的拆分可以使数据库对不同用户或者服务互不影响,提高数据库的可用性和灵活性。

 

 

主从复制一般会有以下几种问题:

  • 主从延迟:由于主从复制是异步的,从节点可能会落后于主节点,导致数据不一致的情况。主从延迟的原因可能有网络延迟、从节点负载过高、主节点写入过快等。主从延迟的解决办法可能有优化网络配置、增加从节点数量、使用并行复制或半同步复制等23。
  • 主键冲突:如果主从复制中存在双主或者多主的情况,可能会出现主键冲突的问题,即两个或多个主节点同时插入相同的主键值,导致数据不一致或者复制失败。主键冲突的解决办法可能有使用自增列或者UUID作为主键、使用分区表或者分片等。
  • 数据不一致:除了上述两种情况外,还有一些其他的原因可能导致数据不一致的问题,例如非确定性函数的使用、隐式类型转换、字符集编码不匹配、binlog格式不兼容等。数据不一致的解决办法可能有使用行级binlog格式、避免使用非确定性函数、保持字符集编码一致、定期检查数据完整性等。

 

如何检查主从复制是否正常工作?

  • 通过执行 show slave status 命令,查看从节点的复制状态,主要关注以下几个字段:
    • Slave_IO_Running 和 Slave_SQL_Running 是否都为 Yes,表示复制线程是否正常运行。
    • Last_IO_Error 和 Last_SQL_Error 是否为空,表示复制过程中是否出现错误。
    • Seconds_Behind_Master 表示从节点落后于主节点的时间,越小越好,如果为 NULL 表示复制出现问题。
  • 通过执行 show master status 命令,查看主节点的二进制日志信息,主要关注以下几个字段:
    • File 和 Position 表示当前二进制日志的文件名和位置,与从节点的 Relay_Master_Log_File 和 Exec_Master_Log_Pos 对比,可以判断从节点是否追上了主节点。
    • Binlog_Do_DB 和 Binlog_Ignore_DB 表示主节点设置的需要复制或忽略的数据库,与从节点的 Replicate_Do_DB 和 Replicate_Ignore_DB 对比,可以判断主从节点是否一致。
  • 通过执行 select @@server_id 命令,查看主从节点的服务器ID,确保不同的节点有不同的ID,否则会导致复制失败或循环复制。
  • 通过执行 select @@read_only 命令,查看从节点的只读状态,确保从节点设置了 read_only=1,防止从节点被误写入数据。
  • 通过使用第三方工具,如 Maatkit 工具包中的 mk-table-checksum 工具,对比主从节点的表数据的校验和(checksum),检查数据是否一致。

标签:主从复制,数据库,复制,mysql,原理,数据,节点
From: https://www.cnblogs.com/shoshana-kong/p/17471490.html

相关文章

  • mysql MVCC 原理
    MVCC的定义MVCC,即多版本并发控制,是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC的目的是为了提高数据库的并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。MVCC的目的在MySQL中,InnoDB......
  • 本地mysql服务无法启动 解决方案
    问题引入:在我启动SQLyog时,无法连接mysql,检查MYSQL服务,并无法手动启动,由此一下是解决步骤。首先,以管理员身份打开cmd。进入到mysql的bin目录,这里需要各位去文件找找路径;在bin下,删除mysqld的所有内容;​ mysqld--remove成功:Servicesuccessfullyremoved.......
  • Python 3.x对MySQL数据库的常用操作
    首先安装MySQL,然后使用pipinstallpymysql安装扩展库,最后执行下面的代码。运行结果:公众号“Python小屋”......
  • MySQL数据库安全评估工具
    MySQL数据库安全评估工具MySQLDatabaseSecurityAssessmentTool   MySAT执行多项测试以分析数据库配置和安全策略。MySAT可以帮助评估并因此提高MySQL数据库的安全性。MySAT是一个简单的SQL脚本,它易于理解,易于维护。MySAT的结果是一份HTML格式的报告。MySQL数据库安全评估......
  • 关于AWS-EC2-EBS-快照-或者AMI-创建的过程及原理
    对于AWSEC2的EBS创建快照Snapshot的原理逻辑,主要如下快照是异步制作的;时间点快照是立即创建的,但在快照完成(当所有已修改数据块都已转移到AmazonS3时)之前,其状态为 pending,很多大型初始快照或后续快照(其中的数据块已更改)可能需要几个小时才能完成。执行期间,正在进行的快照......
  • Windows桌面水印去除工具Universal Watermark Disabler原理分析及实现
    1.背景  最近做驱动开发,开启了系统测试模式,于是桌面的右下角就有一个水印,如下图:  测试了网上修改注册表方法不起作用,最后找到一款工具UniversalWatermarkDisabler可以把水印去除掉。于是对其原理有些兴趣,就有了相关的分析及编程实现。2、相关分析2.1相关行为分析  ......
  • 编译原理面试题
    1、请解释编译器前端和后端的区别,并描述它们在编译过程中的职责。编译器是将高级程序语言转换为目标机器语言的软件工具。它通常由两个主要组件组成:前端和后端。编译器前端:编译器前端主要负责源代码的分析和处理。它包括以下阶段:词法分析(LexicalAnalysis):将源代码分解成标记......
  • 如何提取DNA【原理】
    DNA提取是一种将DNA从生物样本中分离和纯化的过程。下面是一般的DNA提取步骤:选择样本:选择包含DNA的样本,可以是细胞、组织、血液、唾液、植物材料等。细胞破碎:使用物理或化学方法将细胞破碎,以释放DNA。常见的方法包括机械破碎、冻融、酶解或化学溶解。溶解蛋白质:加入蛋白......
  • docker 核心原理
    docker网络docker安装后自动创建3种网络dockernetworkls查看:bridgehost类似Vmware的NAT模式。none通过dockerinfo可见支持的网络类型:Network:bridgehostipvlanmacvlannulloverlaydocker使用Linux桥接网卡,在宿主机虚拟一个docker容器网桥(docker0),docker启动......
  • 【后端面经-数据库】MySQL的存储引擎简介
    目录MySQL的存储引擎0.存储引擎的查看和修改1.MyISAM2.InnoDB3.MEMORY4.MERGE5.总结6.参考博客MySQL的存储引擎mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。0.存储引擎的查看和修改查看当前数据库的默认存储引擎showvariableslike'default_storage_e......