一主一从的工作原理

 

思考主库中的数据是如何同步到从库中的。主从复制基于主库的二进制日志文件

 

主库: 一旦发生增删改操作,以及执行DDL语句的时候,就会将所有的数据变更写入到binlog前缀的日志里面,binlog前缀的日志叫二进 制日志(我们前面学过),也就是在二进制日志当中记录了主库所有的数据变更

 

从库:涉及到两组线程,来保证主从数据库的数据是一致的

1、IOthread: 发起请求,用于连接主库,实时读取主库当中的二进制日志,并且该线程会将读取到的日志数据写入到自身(从库)的日志里面 这个自身的日志就叫relay.log(中继日志)

2、SQLthread: 读取中继日志里面的数据,把中继日志里面的数据变化,记录到自身数据库(从库)的数据变化

 

例如 在主库中执行一条insert语句,这条insert语句就会被写入二进制日志,然后被从库的IOthread线程读取,并写入它自己从库里面的中继日志, 最后从库的SQLthread会读取中继日志,当读到这条insert语句的时候,就会在从库中也执行一次这条insert语句

 

严格一点来讲主从复制的过程的话,如下三步

1、master主库在事务提交时,会把数据变更记录在二进制日志文件binlog中

2、从库读取主库的二进制日志文件binlog,写入到从库的中继日志relay log

3、slave从库重做中继日志的时间,将改变反映它自己的数据

 

 

具体操作

 

1、在第一台服务器(主库)赋予你创建的远程用户的所有权限,例如grant all on . to 'fenli_zhu'@'%';,flush privileges;

 

2、第一台服务器就是我们的主库,用户为fenli_zhu。第二台服务器是我们的从库,用户为root(自带)。并配置好这两台服务器的主从环境

 

3、在主库执行如下

 

4、在从库也能查看到duxiefenli_itcast数据库、tb_user表

 

到这里就说明你的环境是正常的,下节课我们将正式学习一主一从的读写分离操作