mysql replication /mysql 主从复制原理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql replication /mysql 主从复制原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3225字,纯文字阅读大概需要5分钟。
内容图文
![mysql replication /mysql 主从复制原理](/upload/InfoBanner/zyjiaocheng/462/41060cfb52694a40bf797dea26bdbf18.jpg)
一下内容均是根据leader的培训分享整理而成
************************************我是分割线****************************************
mysql5.5 replication
大概过程:
一。首先在master 执行一个事物,提交(mysql默认设置为自动提交),
二。提交之后 写到2个文件,一个是将数据写入datafile(这个数据是结果一致,例如有个数据单元开始数据是1,中间经过2,3等变化,最后是4,那么写入最终结果4), 一个是将事物写入bin_log(binary log),确切说不一定是事物,具体分为3种,1.statement-based logging, 2.row-based loggging,3.mixed logging.
binlog 里是很多的event, binlog开头是4个空位,具体作用不详(据leader讲是event开始的标志)。4个空位后有一位表示Format Description E(FDE),以事物为单位向binlog写数据,一个事物可以包含n个event,binlog结束有xid标志。(toconfirm:xid是一个事物的结束符号还是binlog内容结束的符号?)
每一个event里都有校验位,如果网络传输出现问题可以断点续传之类的,
三。master 把 binlog文件通过一个叫dump的线程传给slave, slave 将接到的event写入一个叫Relay log(中继日志)的文件,然后根据relay log用一个叫applier的东西 做commit(写datafile, 和 binlog)
binlog 和relay log 内容不总是相同,因为可以设置eventsize,如果master上有一个事物写入到binlog后使得size 超过eventsize(可以撑大,因为binlog以事物为单位存,而非event为单位), 这样传给slave后,当relay log达到slave端的event size后就会起新文件写入后续接收到的event.
unsafe的replication, 如果事物中含有rand类的赋值是safe的,因为event记录中有rand的种子, 可是如果有now()这样的赋值就是unsafe,因为有时间差,这时候statement-based logging 就会出错,可以用mixed logging.
mysql5.5版本的replication存在的问题:
主从数据差异:对主的操作可以是多并行,可是向从写入确实将多个并行的操作记录到binlog,然后串行的发送给从, 所以从的数据在没有完全执行完binlog前跟主存在差异, 而且并行到串行执行的效率可能也会差很大。解决方式,对从的操作考虑并行,或者semisynchronize, 可是如果同时并行,主的运行效率可能要下降,因为它既要执行自己的并行操作,还要将binlog里的event并行的发给从。semisychronize是适当降低主的并发操作,等待从,但是如果从的响应过慢,严重影响主的响应,主就要继续执行自己的并发。
************************************我是分割线****************************************
mysql 5.6 replication
一。使用gtid, 而不再是bin log 的pos来标识event 。因为如果存在像 master-->slave1(pos 100)--->slave2(pos 80), master-->slave3(pos150)这样的主从结构,如果master突然down掉,slave3变成主从的话, slave2将无法分辨下一条event的位置, slave2(pos80)只是相对自己相连的slave1里的binlog而言的event pos
二。使用MTS(multiple thread slave) 以schema为单位的多线程,因为对不同schema的操作不会相互影响,所以可以并行
************************************我是分割线****************************************
GroupCommit(组提交), mysql的多个提交并成组,目的是提高写速度,binlog 和groupcommit同用会有问题
toconfirm(mysql bug 70370)
************************************我是分割线****************************************
semisynthronize 过程
半同步的意义eg:用户在主上执行了插入,从的数据还没有更新,用户的主上可以查到新数据,从上却查不到。
为了解决类似上述的问题使用semisynthronize, 执行用户的操作 commit先不要执行,写入binlog, 然后将binlog 里新加入的event dump给Slave, slave 接受好之后给主ACK, 然后主在commit。
mysql replication /mysql 主从复制原理
标签:
本文系统来源:http://www.cnblogs.com/janey/p/5383741.html
内容总结
以上是互联网集市为您收集整理的mysql replication /mysql 主从复制原理全部内容,希望文章能够帮你解决mysql replication /mysql 主从复制原理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。