腾讯工程师带你深入解析 MySQL binlog
image.png image.png主从复制
MySQL异步复制
a.Master将数据改变记录到二进制日志(binary log)中
b.Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容
c.Master接收到来自Slave的IO进程的请求后,负责复制的IO进程会根据请求信息读取日志指定位置之后的日志信息,返回给Slave的IO进程。
返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置
d.Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的
文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master从某个bin-log的哪个位置开始往后的日志内容
e.Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行
MySQL半同步复制 需要安装插件支持
https://dev.mysql.com/doc/refman/5.6/en/replication-semisync.html
不存在同步复制的实现;
数据恢复
恢复,就是让mysql将保存在binlog日志中指定段落区间的sql语句逐个重新执行一次而已
MySQL5.6
image.pngMySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
image.png image.png image.pngundo log是把所有没有COMMIT的事务回滚到事务开始前的状态,系统崩溃时,可能有些事务还没有COMMIT,在系统恢复时,这些没有COMMIT的事务就需要借助undo log来进行回滚。
redo log是指在回放日志的时候把已经COMMIT的事务重做一遍,将未落盘的已提交的事务落盘;
对于没有commit的事务按照abort处理,不进行任何操作。
你只需要直到undo log, redo log用来做啥的就行了, 无需深入运行机制了解。
网友评论