mysql为什么主从复制_为什么要做主从复制?

经历过一次mysql主从延迟之后,就开始思考,主从复制是什么东西?它是怎么实现的呢?它的原理是什么?于是乎就开始查阅资料、文章,现将自己理解到的内容总结在此,加深印象。

为什么要做主从复制?

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

2、做数据的热备

3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

mysql主从复制的原理是什么?

binlog: binary log,主库中保存所有更新事件日志的二进制文件。

主从复制的基础是主库记录数据库的所有变更记录到binlog。binlog是数据库服务器启动的那一刻起,保存所有修改数据库结构或内容的一个文件。

mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。

在主库里,只要有更新事件出现,就会被依次地写入到binlog里面,之后会推到从库中作为从库进行复制的数据源。

binlog输出线程。每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。

对于每一个即将发送给从库的sql事件,binlog输出线程会将其锁住。一旦该事件被线程读取完之后,该锁会被释放,即使在该事件完全发送到从库的时候,该锁也会被释放。

在从库里,当复制开始的时候,从库就会创建两个线程进行处理:

从库I/O线程。当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。

从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。

从库的SQL线程。从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。

可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。

从库通过创建两个独立的线程,使得在进行复制时,从库的读和写进行了分离。因此,即使负责执行的线程运行较慢,负责读取更新语句的线程并不会因此变得缓慢。比如说,如果从库有一段时间没运行了,当它在此启动的时候,尽管它的SQL线程执行比较慢,它的I/O线程可以快速地从主库里读取所有的binlog内容。这样一来,即使从库在SQL线程执行完所有读取到的语句前停止运行了,I/O线程也至少完全读取了所有的内容,并将其安全地备份在从库本地的relay log,随时准备在从库下一次启动的时候执行语句。

查看主从复制的状态

当主从复制正在进行中时,如果想查看从库两个线程运行状态,可以通过执行在从库里执行”show slave status\G”语句,以下的字段可以给你想要的信息:Master_Log_File — 上一个从主库拷贝过来的binlog文件

Read_Master_Log_Pos — 主库的binlog文件被拷贝到从库的relay log中的位置

Relay_Master_Log_File — SQL线程当前处理中的relay log文件

Exec_Master_Log_Pos — 当前binlog文件正在被执行的语句的位置

整个主从复制的流程可以通过以下图示理解:

a1ddf9c559bb32d17e80b2bc2addd264.png步骤一:主库db的更新事件(update、insert、delete)被写到binlog

步骤二:从库发起连接,连接到主库

步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库

步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log

步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db注:上面的解释是解释每一步做了什么,整个mysql主从复制是异步的,不是按照上面的步骤执行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL使用主从复制可以带来很多好处,其中一些包括: 1. 分担主数据库的读写压力。当主数据库面临高并发的读写请求时,使用从数据库来分担读的压力,可以减轻主数据库的负担,从而提高主数据库的性能和稳定性。 2. 提高数据的可用性。当主数据库出现故障或宕机时,从数据库可以作为备份数据库,保证数据的可用性。 3. 支持数据备份和恢复。通过主从复制,可以将主数据库的数据同步到从数据库中,从而实现数据备份和恢复的功能。 4. 实现读写分离。通过主从复制,可以将读请求分配给从数据库,将写请求分配给主数据库,从而实现读写分离,提高系统的性能。 总之,MySQL使用主从复制可以提高系统的性能、可用性和稳定性,是一种非常有用的数据库技术。 ### 回答2: MySQL使用主从复制的主要目的是实现数据库的高可用性和数据备份。 首先,主从复制可以提供数据库的高可用性。当主数据库发生故障或停机维护时,从数据库可以接管主数据库的工作,保证系统的持续可用性。通过将数据库复制到多个从数据库上,可以在主数据库故障时自动切换到从数据库,减少系统的停机时间,提高系统的可用性和稳定性。 其次,主从复制可以实现数据备份。通过将主数据库的数据复制到从数据库上,可以保证数据的冗余存储,一旦主数据库发生数据丢失或损坏的情况,可以从从数据库中恢复数据。同时,从数据库也可以作为主数据库的数据备份,当主数据库需要进行大规模数据操作或升级时,可以将读操作交给从数据库处理,减轻主数据库的负载。 此外,通过主从复制还可以实现数据的分布式部署。可以将读操作分散到多个从数据库上,提高数据库的读取性能。主数据库负责处理写操作和数据同步,从数据库负责处理读操作,可以有效地提升整个系统的性能和吞吐量。 总之,MySQL使用主从复制可以实现数据库的高可用性、数据备份和分布式部署,提高系统的可靠性、灵活性和性能。 ### 回答3: MySQL主从复制是指在MySQL数据库中,通过配置一个主服务器和多个从服务器,将主服务器上的数据自动同步到从服务器上的一种数据同步机制。 MySQL使用主从复制有以下几个原因: 1. 提高系统的可伸缩性和性能:通过主从复制,可以将读写操作分散到多个服务器上,提高系统的处理能力和性能。主服务器负责处理写操作,从服务器负责处理读操作,有效地减轻了主服务器的负载压力,提高了系统的响应速度。 2. 实现数据备份和灾备:主从复制可以将主服务器上的数据同步到从服务器上,实现数据的备份和灾备。当主服务器发生故障或数据损坏时,可以快速切换到从服务器,保证系统的可用性和数据的安全性。 3. 提高数据的可用性和可靠性:通过主从复制,可以实现数据的多份拷贝,增加了数据的存储和获取的可用性。当主服务器发生故障或维护时,从服务器可以继续提供服务,保证了数据的连续性和可靠性。 4. 支持分布式计算:通过主从复制,可以将数据分布到不同的服务器上进行处理,实现分布式计算。不同的从服务器可以独立地进行计算和处理,提高了系统的并发能力和计算效率。 5. 实现读写分离:通过主从复制,可以将读操作和写操作分离到不同的服务器上。主服务器负责处理写操作,从服务器负责处理读操作。这样可以有效地提升系统的读取性能,提高用户的体验。 综上所述,MySQL使用主从复制可以提高系统的可伸缩性和性能,实现数据备份和灾备,提高数据的可用性和可靠性,支持分布式计算,实现读写分离,使得系统更加稳定和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值