主从复制原理: 1、主从复制的前提 1.1 两台以上mysql实例 多台物理机 多个mysql实例 1.2 主库要开启二进制日志

1.3 主库要提供复制相关的用户 replication slave,一个比较特殊的权限 grant replication slave on *.* to repl@'10.0.0.%' identified by '123'; 1.4 从库需要将和主库相差的数据,进行追加 一般情况下可以人为备份主库数据,恢复到从库上 1.5 从应该从恢复之后的时间点,开始自动从主库获取新的二进制日志开始应用 我们需要人为告诉从库,从哪开始自动开始复制二进制日志(file+position),另外还需要告诉从库user,passwd,port,ip 注意:通过change master to命令,告诉从库连接主库的用户/密码/端口信息等



2、复制中的线程及文件介绍 2.1、主库 Dump(也称IO线程) thread:在复制过程中,主库发送二进制日志的线程 2.2、从库 IO thread:向主库请求二进制日志,并且接受二进制日志的线程 SQL thread:执行请求过来的二进制的线程 2.3、主库 binlog文件:主库的二进制日志 2.4、从库 relaylog:中继日志,存储请求过来的二进制日志 master.info: 1、从库连接主库的重要参数(user,passwd,ip,port) 2、上次获取过的主库二进制日志的位置 relay-log.info 存储从库SQL线程已经执行过的relaylog日志位置



3、主从复制的工作原理 3.1 从库,IO线程,读取master.info中的信息, 获取到连接参数(user\passwd\ip\port)+上次请求过的主库的binlog的位置(例子:mysql-bin.000003,position=640) 3.2 IO线程使用链接到主库,拿着位置信息(mysql-bin.000003,position=640),问主库有没有比这个更新的二进制日志。 3.3 主库查询二进制日志,并对比从库发送过来的位置信息(mysql-bin.000003,position=640),如果有新的二进制日志,会通过 dump thread发送给从库。 3.4 从库通过IO线程,接受主库发来的二进制日志,存储到TCP/IP缓存中,并且返回“ACK”确认给主库,这时主库收到ACK后, 就认为复制完成了,可以继续其他工作了。 3.5 从库更新master.info,二进制日志位置更新为新的位置信息。 3.6 从库IO线程会将TCP/IP缓存中的日志,存储到relay-log中继日志文件中。 3.7 从库SQL线程,读取relay-log.info,获取到上次执行到的relaylog日志位置,以这个位置信息作为起点,往后继续执行中继日志。 3.8 SQL线程执行完成所有relay之后,会更新relay-log.info信息为新位置信息。