在互联网应用系统中,扩展最为方便的可能要数最基本的 Web 应用服务了。因为Web应用服务大部分情况下都是无状态的,也很少需要保存太多的数据,当然Session 这类信息比较例外。所以,对于基本的 Web应用服务器很容易通过简单的添加服务器并复制应用程序来做到 Scale Out(横向扩展)。 MySQL Replication 功能主要解决Scale Out(横向扩展)。 通过MySQL 的 Replication 功能, 我们可以非常方便的将一个数据库中的数据复制到很多台MySQL主机上面,组成一个MySQL集群,然后通过这个 MySQL 集群来对外提供服务。这样,每台MySQL 主机所需要承担的负载就会大大降低,整个MySQL集群的处理能力也很容易得到提升。 Mysql 的 Replication 是一个异步的复制过程,从一个 Mysql Instace(Master)复制到另一个Mysql Instance(Slave)。在Master与Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在Slave端,另外一个线程(IO线程)在 Master端。 敲黑板、划重点、总结 仅供参考 实际上,在老版本中,MySQL的复制实现在Slave端并不是由SQL线程和IO线程 这两个线程共同协作而完成的,而是由单独的一个线程来完成所有的工作。但是MySQL的工程师们很快发现,这样做存在很大的风险和性能问题。 主要如下: 敲黑板、划重点、总结 MySQL的复制可以是基于一条语句(Statement Level),也可以是基于一条记录(Row level),可以在 MySQL的配置参数中设定这个复制级别,不同复制级别的设置会影响到 Master端的Binary Log记录成不同的形式。 每一条会修改数据的Query都会记录到Master的Binary Log中。Slave在复制的时候SQL线程会解析成和原来Master端执行过的相同的Query来再次执行。 Statement Level下的优点首先就是解决了Row Level下的缺点,不需要记录每一行数据的变化,减少Binary Log日志量,节约了IO成本,提高了性能。因为他只需要记录在 Master上所执行的语句的细节,以及执行语句时候的上下文的信息。 敲黑板、划重点、总结 由于它是记录的执行语句,所以,为了让这些语句在slave 端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所语有句在 slave 端杯执行的时候能够得到和在Master端执行时候相同的结果。另外就是,由于Mysql现在发展比较快,很多的新功能不断的加入,使Mysql 得复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造成mysql的复制出现问题,主要是修改数据的时候使用某了些特定的函数或者功能的时候会出现,比如:sleep(),rand()函数在有些版本中就不能真确复制,在存储过程中使用了 last_insert_id()函数,可能会使 slave 和 master上得到不一致的id等等。由于row level是基于每一行来记录的变化,所以不会出现类似的问题。 敲黑板、划重点、总结 Binary Log中会记录成每一行数据被修改的形式,然后在Slave端再对相同的数据进行修改。 在 Row Level模式下,Binary Log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以Row Level 的日志内容会非常清楚的记录下每一行数据修改的细节, 非常容易理解。 而且不会出现某些特情定况下的存储过程,或function以及trigger的调用和触发无法被正确复制的问题。 敲黑板、划重点、总结 Row Level下,所有的执行的语句当记录到Binary Log 中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容, 因为MySQL对于ALTER TABLE之类的DDL变更语句的处理方式是重建整个表的所有数据,也就是说表中的每一条记录都需要变动,那么该表的每一条记录都会被录记到日志中。 敲黑板、划重点、总结
前言
什么是Replication,干什么用的呢
Replication是怎么个工作的呢,背后的逻辑或原理是什么样子的
Replication 整体介绍
Replication 线程总结 敲黑板,划重点
Master
Slave
背后操作逻辑(实现原理)
流程图
扩展
上面我们了解了什么是Replication,以及是干什么的,下面我们来了解下Replication的复制实现级别
Replication 复制级别 整体介绍
Statement Level
优点
缺点
Row Level
优点
缺点
比如有这样一条update语句 UPDATE group_message SET group_id = 1 where group_id = 2 执行之后,日志中记录的不是这条update语句所对应的事件(MySQL 以事件的形式来记录Binary Log日志) 而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然Binary Log日志的量就会很大。 尤其是当执行ALTER TABLE 之类的语句的时候,产生的日志量是惊人的。
Replication 常用的架构
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算