原理 思考主库中的数据是如何同步到从库中的。主从复制基于主库的二进制日志文件
主库: 一旦发生增删改操作,以及执行DDL语句的时候,就会将所有的数据变更写入到binlog前缀的日志里面,binlog前缀的日志叫二进 制日志(我们前面学过),也就是在二进制日志当中记录了主库所有的数据变更
从库:涉及到两组线程,来保证主从数据库的数据是一致的
1、IOthread: 发起请求,用于连接主库,实时读取主库当中的二进制日志,并且该线程会将读取到的日志数据写入到自身(从库)的日志里面 这个自身的日志就叫relay.log(中继日志)
2、SQLthread: 读取中继日志里面的数据,把中继日志里面的数据变化,记录到自身数据库(从库)的数据变化
例如 在主库中执行一条insert语句,这条insert语句就会被写入二进制日志,然后被从库的IOthread线程读取,并写入它自己从库里面的中继日志, 最后从库的SQLthread会读取中继日志,当读到这条insert语句的时候,就会在从库中也执行一次这条insert语句
严格一点来讲主从复制的过程的话,如下三步
1、master主库在事务提交时,会把数据变更记录在二进制日志文件binlog中
2、从库读取主库的二进制日志文件binlog,写入到从库的中继日志relay log
3、slave从库重做中继日志的时间,将改变反映它自己的数据