欢迎访问www.allbetgaming.com!

首页科技正文

洛阳市人才网:MySQL 入门(5):复制

admin2020-05-1856

摘要

在这篇文章中,我将从MySQL为什么需要主从复制最先讲起,然后会提到MySQL复制的条件,bin log

在这里会说明三种花样的bin log划分会有什么优缺点。

随后会讲到主从延迟方面的问题,我将从几个角度出发,提供一些可能造成延迟的思绪。

1 为什么需要复制

MySQL内建的复制功效是构建大型,高性能应用程序的基础。随着现在并发量的增添,单机的MySQL逐渐没有办法负担这些请求,以是MySQL服务器也需要举行扩展。

MySQL的复制功效不仅可以提高可用性,还能用作灾备,数据仓库等。

2 若何复制

说到复制,那么问题的要害就在于数据从主库复制到从库时间需要若干,准确度能有多高。

对于MySQL来说,复制使用的是bin log

对于bin log相信你不会生疏,我们在聊到MySQL的“两阶段提交”的时刻有说到这个。

也就是说,MySQL会将主库纪录的bin log发送到从库中,然后从库根据bin log的内容,“重放一遍”主库执行过的操作,到达主从同步的目的。

在这里我们先详细说一说bin log纪录了什么。

2.1 SBR(statement-based replication)

在这种模式下,bin log会完整的纪录下所执行的SQL语句。也就是说,若是使用了statement花样的bin log的话,主库执行的SQL语句就会在从库中完整的再执行一遍。

可是,这样的做法,是有可能导致主从纷歧致的。

例如下面这样的语句:

delete from t where a >= 1 and b => 2 limit 1;

这样的语句在从库中就纷歧定能够实现跟主库一样的效果。由于我们不能够确定在从库中是否走的跟主库是同样的索引,所查找的第一条数据,是不是跟主库一样的,也就可能删除的数据不是统一行。

又或者主库执行的SQL语句内里有一些锁相关的语句,也可能会造成主从纷歧致的问题。

然则要注意的是,NOW()函数是可以被准确执行的,由于在bin log语句中会纪录时间戳。

也就是说,基于statement模式,在上下文差别的时刻,是有可能造成数据纷歧致的。

至于其他的不安全情形,可以参考官方文档,这里不睁开先容。

2.2 RBR(row-based replication)

既然statement模式下会造成数据纷歧致,那么有没有一种模式是上下文无关的呢?

以是就有了row模式。

在这个模式中,bin log中只纪录了所操作的行的修改情形,会正确到某一行。

好比你更新了某一行,在bin log中就会纪录在id即是若干若干,某某字段即是若干若干的行中,将某个字段的值从A改成了B。

甚至是删除操作,都市纪录删除了id即是若干,A字段即是若干,B字段即是若干的一行数据。

听到这里你可能会以为很利便,也很正确,主从不再会发生纷歧致的情形了。甚至于删库了都不需要跑路了,只需要查看bin log就能恢复响应的数据了。

然则使用row模式同样会有一些问题。好比你在主库执行了delete from t where id < 10000这么一行sql语句,若是使用statement花样,在bin log内纪录只有这么一条,然则若是你使用的是row模式,那么就需要纪录10000条数据,占用很大的空间。

2.3 MBR(mixd-based replication)

于是就有了mixd模式。

夹杂了以上两种模式的优点,MySQL会在没有歧义的时刻使用statement花样,在有歧义的时刻使用row花样。

3 复制的详细历程

上面先容了bin log的作用,以及bin log的组成形式,在这一章中我们聊一聊整个的复制流程。

我们拿《高性能MySQL》中的图来注释:

这里涉及到了有三个线程:

  • Binlog dump thread
    这个线程在MySQL主库中,卖力读取bin log中的内容,并将这些内容推送到从库IO历程中。

  • I/O thread
    这个线程在MySQL从库中,卖力跟主库确立一条长毗邻,而且将读取到的bin log数据保存到从库的中继日志(relay log)中。

  • SQL thread
    这个线程也是在MySQL的从库中,卖力读取中继日志中的内容,然后执行这些语句,将对数据的修改应用到从库中。

简朴的来讲,就是主库经由两阶段提交后,把修改内容保存在了bin log中,然后把这个bin log发送给从库,让从库也执行一次,以到达同步的目的。

而这里采用了中继日志的缘故原由是从库消费bin log的速率和主库生产bin log的速率是纷歧致的,以是需要一个中继日志作为缓冲。

4 复制可能造成的问题

在MySQL复制的历程中,经常出现的问题是延迟

  • 假设我们把主库一个事务提交后bin log落盘的时间点设为t1

  • 把从库接受到主库新事务写的bin log并写入relay log的时间节点设为t2

  • 把从库执行完这个新的事务的时间节点设为t3

那么执行一条事务,从库的延迟可以认为是(t3 - t1)。

也就是说,若是我们需要剖析造成主从延迟的缘故原由,应该从两个方面思量:传输历程,以及从库消费relay log的速率。

4.1 网络问题

网络确实可能会造成主从延迟,好比主库或者从库的带宽打满,又或者是主库的bin log被设置成了row花样,导致有大量的数据需要传输,造成了主库的bin log没有实时的同步到从库中,导致了主从的延迟。

4.2 机械性能

然则除了网络,更多的是从库的消费速率,跟不上主库的生产速率。

这方面有许多缘故原由,好比可能从库的机械设置低于主库,由于会有人以为既然是备库,没什么请求,就把备库设置在了比较差的机械上面。

又或者在是后台的数据剖析,将CPU打满。

总之,若是在从库中需要有大量的查询剖析操作,需要思量多个从库。

4.3 大事

若是主库执行了一条耗时很长的事务,那么这条事务发送到从库中,可能也需要执行这么长的时间。而这个时刻,从库是没有办法继续消费新的relay log的。这就造成了主从延迟。

4.4 锁

我们之条件到过了,不仅仅写数据会加锁,使用“当前读”,也一样可能会加锁。

以是,若是在从库上执行了一些诸如select ... for update,或者一些DDL语句,可能也会造成从库加锁,导致主从延迟。

4.5 并发

在我们上面的先容中,SQL线程是单线程的,以是,若是能够让SQL线程可以并发消费,那么主从延迟就可以大幅度的降低了。

关于MySQL的并发复制计谋,MySQL5.6最先已经正式支持了,本文不详细注释。

写在最后

首先,谢谢你能看到这里。

这一篇的文章,实在说的内容不多,大多都是一些理论性子的内容,目的是能够对MySQL的主从复制有一些大体上的领会,而且知道对于延迟方面的问题,应该从哪个偏向去思量。

至于其他更详细的操作、若何调优,以及更深的原理,我想在往后的《进阶篇》来提到。

而且,《MySQL 入门》系列到这里就完结了。希望这五篇的内容能够给你带来一些辅助,能够让你对MySQL的领会更深一些。

固然了,在学习MySQL的历程中,我可能也会有一些错误的明白,若是有那里是纰谬的,希望你能指出,谢谢你!

PS:若是有其他的问题,也可以在民众号找到我,迎接来找我玩~

,

Sunbet

Sunbet www.cangzhoujinchang.com Sunbet简单方便,游戏种类繁多,现推出手机客户端app,在sunbet即可下载,随时随地体验游戏带来的精彩!

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://www.juneview.com/post/820.html

网友评论

最新评论

  • 联博统计 10/26 说:

    欧博APP下载欢迎进入欧博APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。围观一下大佬

  • 联博统计 10/26 说:

    欧博APP下载欢迎进入欧博APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。围观一下大佬

  • 联博统计接口 10/25 说:

    欧博亚洲官方注册欢迎进入欧博亚洲官方注册(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。这反转很溜

  • allbet登陆官网 10/24 说:

    ALLBET官网娱乐平台开户欢迎进入ALLBET官网娱乐平台开户:www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。看得出来很用心

  • UG环球官方注册 10/24 说:

    联博统计接口www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。我是看文小能手

  • UG环球网址 10/24 说:

    AllbetGmaing下载欢迎进入AllbetGmaing下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。想象力不错

  • UG环球网址 10/24 说:

    联博以太坊www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。美中不足,有点短

  • ALLBET官网开户网址 10/24 说:

    欧博亚洲APP下载欢迎进入欧博亚洲APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。看得很心潮澎湃