欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql主从复制原理和作用(较详细)

程序员文章站 2022-06-19 10:21:00
最近一直在了解数据库的一些实现细节,今天结合网上的一些资料,总结一下Mysql的原理和作用。什么是主从复制主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。一般在数据量较大的情况下会考虑,当然我们做的单机程序可能用不到这些内容,但是现在是个大数据时代,各种技术都会和分布式相联系,主要是为了进行负载均衡,数据库的主从复制其实就是为了解决数据过大,单机进行增删改查压力会比较大,所以把数据的增删改和查分开。主从复制的作用1 作为后备数据库,主数据...

最近一直在了解数据库的一些实现细节,今天结合网上的一些资料,总结一下Mysql的原理和作用。

什么是主从复制

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。一般在数据量较大的情况下会考虑,当然我们做的单机程序可能用不到这些内容,但是现在是个大数据时代,各种技术都会和分布式相联系,主要是为了进行负载均衡,数据库的主从复制其实就是为了解决数据过大,单机进行增删改查压力会比较大,所以把数据的增删改和查分开。

主从复制的作用

1 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的评率,提高单个机器的I/O性能。
3 读写分离,使数据库能支持更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
也可以总结为以下情况:
1–在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
2–在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
3–当主服务器出现问题时,可以切换到从服务器。(提升性能)

主从复制的方式

1 一主一从,基础的主从结构
2 主主复制(两个主机在同一等级上,没有主从之分)
3 一主多从,适用于增删改少,查询多的业务
4 多主一从(Mysql 5.7开始支持),适用于增删改较多,查询少的业务
5 联级复制
Mysql主从复制原理和作用(较详细)

主从复制实现原理

1.数据库有个bin-log二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制到从数据库。
3.让其转为从数据库的relay-log中继日志,通过中继日志将朱数据库中的SQL语句同步到从数据库,保证主从数据库一致。
4.具体需要三个线程来操作:
1.binlog输出线程:每当有从库连接到主库发送请求时,主库都会创建一个线程然后发送binlog内容到从库。
同样,在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
1从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
2.从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。
Mysql主从复制原理和作用(较详细)

主从复制的优点

好处一:实现服务器负载均衡
通过服务器复制功能,可以在主服务器和从服务器之间实现负载均衡。即可以通过在主服务器和从服务器之间切分处理客户查询的负荷,从而得到更好地客户相应时间。通常情况下,数据库管理员会有两种思路。
一是在主服务器上只实现数据的更新操作。包括数据记录的更新、删除、新建等等作业。而不关心数据的查询作业。数据库管理员将数据的查询请求全部 转发到从服务器中。这在某些应用中会比较有用。如某些应用,像基金净值预测的网站。其数据的更新都是有管理员更新的,即更新的用户比较少。而查询的用户数 量会非常的多。此时就可以设置一台主服务器,专门用来数据的更新。同时设置多台从服务器,用来负责用户信息的查询。将数据更新与查询分别放在不同的服务器 上进行,即可以提高数据的安全性,同时也缩短应用程序的响应时间、提高系统的性能。
二是在主服务器上与从服务器切分查询的作业。在这种思路下,主服务器不单单要完成数据的更新、删除、插入等作业,同时也需要负担一部分查询作 业。而从服务器的话,只负责数据的查询。当主服务器比较忙时,部分查询请求会自动发送到从服务器重,以降低主服务器的工作负荷。当然,像修改数据、插入数 据、删除数据等语句仍然会发送到主服务器中,以便主服务器和从服务器数据的同步。

好处二:通过复制实现数据的异地备份

可以定期的将数据从主服务器上复制到从服务器上,这无疑是先了数据的异地备份。在传统的备份*下,是将数据备份在本地。此时备份
作业与数据库服务器运行在同一台设备上,当备份作业运行时就会影响到服务器的正常运行。有时候会明显的降低服务器的性能。同时,将备份数据存放在本地,也
不是很安全。如硬盘因为电压等原因被损坏或者服务器被失窃,此时由于备份文件仍然存放在硬盘上,数据库管理员无法使用备份文件来恢复数据。这显然会给企业
带来比较大的损失。

而如果使用复制来实现对数据的备份,就可以在从服务器上对数据进行备份。此时不仅不会干扰主服务气的正常运行,而且在备份过程中主服务器可以继
续处理相关的更新作业。同时在数据复制的同时,也实现了对数据的异地备份。除非主服务器和从服务器的两块硬盘同时损坏了,否则的话数据库管理员就可以在最
短时间内恢复数据,减少企业的由此带来的损失。

好处三:提高数据库系统的可用性

数据库复制功能实现了主服务器与从服务器之间数据的同步,增加了数据库系统的可用性。当主服务器出现问题时,数据库管理员可以马上让从服务器作为主服务器,用来数据的更新与查询服务。然后回过头来再仔细的检查主服务器的问题。此时一般数据库管理员也会采用两种手段。

一是主服务器故障之后,虽然从服务器取代了主服务器的位置,但是对于主服务器可以采取的操作仍然做了一些限制。如仍然只能够进行数据的查询,而
不能够进行数据的更新、删除等操作。这主要是从数据的安全性考虑。如现在一些银行系统的升级,在升级的过程中,只能够查询余额而不能够取钱。这是同样的道理。
二是从服务器真正变成了主服务器。当从服务器切换为主服务器之后,其地位完全与原先的主服务器相同。此时可以实现对数据的查询、更新、删除等操
作。为此就需要做好数据的安全性工作。即数据的安全策略,要与原先的主服务器完全相同。否则的话,就可能会留下一定的安全隐患。

存在问题
从数据库具有读log文件的延迟,如何解决?

由于从数据库存在更新从库中SQL数据的延迟,万一主库在从库读取binlog的时候宕机,那么数据可能丢失
主要是由于从库只有一个sql Thread去更新从库数据,但是主库写压力大,也就是主库会有很多写任务,同时还要有IO线程与从库进行 binlog 输出,所以复制很可能延时
解决方法:
1 半同步复制—解决数据丢失的问题
2 并行复制—-解决从库复制延迟的问题
正常主从复制(异步复制)的方式,也就是主库直接更新数据,但是主从的复制是在主库更新后或者过程中进行,这样显然容易使数据出问题,比如会丢失修改数据等:
Mysql主从复制原理和作用(较详细)
半同步复制,可以看到当主库进行更新时,在binlog写的过程中,会主动通知Dump进程(输出IO进程)开启,与从库进行数据的同步更新,然后从库会返回一个ack信号给主库的Dump进程,收到ack确认后,会给用户提交的修改进程发送信号,让其继续执行,当然当从库比较多时,这种方法不能保证全部的从库都进行更新,如果网络异常或从库宕机,主库压力过大等,都会造成超时,影响客户响应,并行复制可以一定程度上解决类似问题:

Mysql主从复制原理和作用(较详细)

主从复制和主主复制区别?

最大区别是 主从是对主操作数据,从会实时同步数据。反之对从操作,主不会同步数据,还有可能造成数据紊乱,导致主从失效。
主主则是无论对那一台操作,另一个都会同步数据。一般用作高容灾方案

本文地址:https://blog.csdn.net/qq_29750461/article/details/107125427