mysql数据库主从同步复制原理
MySQL的Replication(英⽂为复制)是⼀个多MySQL数据库做主从同步的⽅案,特点是异步复制,⼴泛⽤在各种对MySQL有更⾼性能、更⾼可靠性要求的场合。与之对应的是另⼀个同步技术是MySQL Cluster,但因为MySQL Cluster配置⽐较复杂,所以使⽤者较少。
MySQL的 Replication是⼀个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从⼀个Mysql
instance(instance英⽂为实例)(我们称之为Master)复制到另⼀个Mysql instance(我们称之slave)。在master与slave之间实现整个复制过程主要由三个线程来完成,其中两个线程(SQL线程和IO线程) 在slave端,另外⼀个线程(IO线程)在master端。
苹果6 plus要实现MySQL的 Replication,⾸先必须打开master端的binlog ()⽇志功能,否则⽆法实现mysql的主从复制。因为mysql的整个主从复制过程实际上就是:slave端从 master端获取binlog⽇志,然后再在⾃⼰⾝上完全顺序的执⾏该⽇志中所记录的各种SQL操作。
有关具体如何开启mysql的binlog⽇志功能,请⼤家⾃⼰在⽹上搜。
MySQL主从复制的基本交互过程,如下:
笔记本屏幕抖动1、slave端的IO线程连接上master端,并请求从指定binlog⽇志⽂件的指定pos节点位置(或者从最开始的⽇志)开始复制之后的⽇志内容。
2、master端在接收到来⾃ slave端的IO线程请求后,通知负责复制进程的IO线程,根据slave端IO线程的请求信息,读取指定binlog⽇志指定pos节点位置之后的⽇志信息,然后返回给slave端的IO线程。该返回信息中除了binlog⽇志所包含的信息之外,还包括本次返回的信息在master端的binlog⽂件名以及在该binlog⽇志中的pos节点位置。
我的中国心演讲稿3、slave端的IO线程在接收到master端IO返回的信息后,将接收到的binlog⽇志内容依次写⼊到slave端的relaylog⽂件(mysql-relay-狮子座女生
淮南旅游景点大全<)的最末端,并将读取到的master端的binlog⽂件名和pos节点位置记录到master-info(该⽂件存在slave 端)⽂件中,以便在下⼀次读取的时候能够清楚的告诉master“我需要从哪个binlog⽂件的哪个pos节点位置开始,请把此节点以后的⽇志内容发给我”。
4、slave端的SQL线程在检测到relaylog⽂件中新增内容后,会马上解析该log⽂件中的内容。然后还原成在master端真实执⾏的那些SQL语句,并在⾃⾝按顺丰依次执⾏这些SQL语句。这样,实际上就是在master端和slave端执⾏了同样的SQL语句,所以master端和slave端的数据是完全⼀样的。
以上mysql主从复制交互过程⽐较拗⼝,理解起来也⽐较⿇烦,我简化了该交互过程。如下:
1、master在执⾏sql之后,记录⼆进制log⽂件(bin-log)。
基金从业资格考试报名2、slave连接master,并从master获取binlog,存于本地relay-log中,然后从上次记住的位置起执⾏SQL语句,⼀旦遇到错误则停⽌同步。从以上mysql的Replication原理可以看出:
* 主从间的数据库不是实时同步,就算⽹络连接正常,也存在瞬间主从数据不⼀致的情况。
* 如果主从的⽹络断开,则从库会在⽹络恢复正常后,批量进⾏同步。
* 如果对从库进⾏修改数据,那么如果此时从库正在在执⾏主库的bin-log时,则会出现错误⽽停⽌同步,这个是很危险的操作。所以⼀般情况下,我们要⾮常⼩⼼的修改从库上的数据。
* ⼀个衍⽣的配置是双主、互为主从配置,只要双⽅的修改不冲突,则可以⼯作良好。
* 如果需要多主库的话,可以⽤环形配置,这样任意⼀个节点的修改都可以同步到所有节点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论