浅谈mysqlreplication(复制)基本原理

浅谈mysqlreplication(复制)基本原理

ID:23531494

大小:54.00 KB

页数:6页

时间:2018-11-08

浅谈mysqlreplication(复制)基本原理_第1页
浅谈mysqlreplication(复制)基本原理_第2页
浅谈mysqlreplication(复制)基本原理_第3页
浅谈mysqlreplication(复制)基本原理_第4页
浅谈mysqlreplication(复制)基本原理_第5页
资源描述:

《浅谈mysqlreplication(复制)基本原理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、浅谈MySQLReplication(复制)基本原理>>教育资源库  1、MySQLReplication复制进程  MySQL的复制(replication)是一个异步的复制,从一个MySQLinstace(称之为Master)复制到另一个MySQLinstance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在Master(IO进程)上。  要实施复制,首先必须打开Master端的binarylog(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master

2、端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。  MySQLReplication复制的基本过程如下:  1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;  2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;  3)、Slave的IO进程接收到

3、信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我;  4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。  实际上在老版本的MySQL的复制实现在Slave端并不是两个进程完成的,而是由一个进程完成。但是后来发

4、现这样做存在较大的风险和性能问题,主要如下:  首先,一个进程就使复制bin-log日志和解析日志并在自身执行的过程成为一个串行的过程,性能受到了一定的限制,异步复制的延迟也会比较长。  另外,Slave端从Master端获取bin-log过来之后,需要接着解析日志内容,然后在自身执行。在这个过程中,Master端可能又产生了大量变化并声称了大量的日志。如果在这个阶段Master端的存储出现了无法修复的错误,那么在这个阶段所产生的所有变更都将永远无法找回。如果在Slave端的压力比较大的时候,这个过程的时间可能会比较长。  所以,后面版本的MySQL为了解决这个

5、风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Yahoo!的一位工程师JeremyZaentlevel),也可以是基于一条记录(Roember_id=bember_id=a,执行之后,日志中记录的不是这条update语句所对应额事件(MySQL以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log日志的量就会很大。尤其是当执行altertable之类的语句的时候,产生的日志量是惊人的。因为MySQL对于altertable之类的表结构变

6、更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表。那么该表的每一条记录都会被记录到日志中。  StatementLevel:每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。  优点:statementlevel下的优点首先就是解决了roaster端执行时候相同的结果。另外就是,由于MySQL现在发展比较快,很多的新功能不断的加入,使MySQL得复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在state

7、mentlevel下,目前已经发现的就有不少情况会造成MySQL的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep()函数在有些版本中就不能真确复制,在存储过程中使用了last_insert_id()函数,可能12下一页>>>>这篇文章来自..,。会使slave和master上得到不一致的id等等。由于roent的复制模式,直到5.1.5版本的MySQL才开始支持roentLevel和Roent和Roentlevel还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中队roent模式来记录,如果sql语句确实就是

8、update或者dele

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。