主从复制

 

五 主从复制 Replication(重要@!!!!!!)

5.1、介绍

基于主库二进制日志实时恢复到备库。

 

5.2、原理

5.2.1 主从复制的前提

1)两台或两台以上数据库实例

2)主库要开启二进制日志

3)主库要有复制用户

4)从库需要在开启复制功能之前,获取到主库之前的数据(主库备份,并且记录binlog当时位置)

5)从库第一次开启主从复制,必须获知主库IPportuser?password?从哪开始复制?

change master to IPportuser?password?从哪开始复制?

6)从库要开启复制相关线程:IOSQL

7)从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个二进制日志

8)从库请求过来的binlog,首先要存下来,执行binlog,执行过的信息保存下来

    5.2.2 主从复制涉及到的文件和线程

    主库

        binlog:记录主库发生过的修改事件

        dump Thread 给从库传送(TP)二进制日志线程

    从库    

        relay-log.000001: 存储所有主库TP过来的binlog事件。

        master.info : 存储复制用户信息,上次请求到的主库binlog的位置点。

        IO线程: 接收主库发来的binlog日志,也是从库请求主库的线程

        SQL线程:source一下relay-log中的日志。

    

    5.2.3 原理(见图。)

    1)通过change master to 语句告诉从库主库IP portuser?password +从哪个binlog开始自动复制

    2)从库通过 start slave 命令,开启复制必要线程IO线程和SQL线程

    3)从库通过IO线程,拿着change的用户密码相关信息,连接主库,主库验证连接的合法性,验证成功通知客户端连接ok

    4)从库连接主库成功后,会拿着 change master to 语句中提供的binlog position 3号文件120位置)号问主库,有没有比这个新的。

    5)主库接收到从库请求后,查找show master status 比较一下,如果有新的,就切割日志并通过dump thread TP给从IO

    6)从库通过IO线程接收到主库发来的binlog,存储到TCPIP缓存中,并立即返回ACK,并更新master.infobinlog信息

    7)将TCPIP缓存中数据写入relay-log日志文件中

    8SQL线程读取relay-log.info ,获取到上次已经执行过的relay-log的位置点,从这之后继续执行后续relay-log日志,执行完成后,更新relay-log.info到此位置一次主从复制就完成

原文地址:https://www.cnblogs.com/nodchen/p/9489392.html