• 三十五、主从复制原理


    涉及的文件

    主库需要使用到binlog文件
    从库需要使用xxx-relay-bin.00000N、master.info、relay-log.info文件

    下面讲解从库涉及到的3个文件
    1、master.info
    连接主库相关信息,已经接收到的binlog位置点信息,默认存放在文件中
    存储位置:/usr/local/mysql/data/master.info
    查看命令:mysql> show variables like '%master%';
    提高性能:将master_info_repository参数由FILE改为TABLE,可以将这些信息存放在表中,即可提高性能



    2、relaylog
    中继日志,负责存储从主库接收到的binlog日志文件
    存储位置:/usr/local/mysql/data/client2-relay-bin.00000N
    查看命令:mysql> show variables like '%relay%';
    查看relaylog事件,结合master.info文件可以判断同步是否完成


    3、relay-log.info
    从库会通过reloylog恢复主库数据,该文件记录已经恢复到reloylog哪里的位置点信息
    存储位置:/usr/local/mysql/data/relay-log.info
    查看命令:mysql> show variables like '%relay_log_info%';
    提高性能:通过 relay_log_info_repository参数定义存放形式,放在表中可以提高性能


    主从复制中涉及的线程

    1、主库线程
    只有一个线程,Binlog_Dump Thread
    作用:用来接收从库的请求,并发送binlog给从库
    查看命令:mysql> show processlist;

    2、从库线程
    有两个线程,分别为IO线程,SQL线程
    SLAVE_IO_THREAD
    用来请求日志,接收日志

    SLAVE_SQL_THREAD
    用来回放应用日志


    主从复制工作过程

    IO_THREAD 简称 IO_T
    SQL_THREAD 简称 SQL_T
    DUMP_THREAD 简称 DUMP_T

    1、从库执行change master to 命令(记录主库的连接信息+复制的起点)
    2、从库会将以上信息记录到master、info文件
    3、从库执行start slave命令,立即开启IO_T和SQL_T线程
    4、从库IO_T读取master、info文件中的信息,获取到IP、PORT、USER、PASS,BINLOG的位置信息
    5、从库IO_T请求连接主库,主库专门提供一个DUMP_T,负责和IO_T交互
    6、IO_T根据binlog的位置信息(log-bin、000005,704),请求主库新的binlog
    7、主库通过DUMP_T将最新的binlog,通过网络传输给从库的IO_T
    8、IO_T接收到新的binlog日志,存储到TCP/IP缓存,立即返回ACK给主库,并将binlog文件名以及下一个更新位置更新到master、info
    9、IO_T线程将TCP/IP缓存中数据,写入到磁盘文件relaylog中
    10、SQL_T线程读取relay、info中的信息,获取上次已经应用过的relaylog的位置信息
    11、SQL_T会按照上次的位置点回放到最新的relaylog,将应用到的位置点信息更新到relay、info信息
    12、从库会自动purge应用过relay进行定期清理

    补充说明:
    1、reloay_log_purge=ON:开启该参数能定期清理应用过的relaylog
    3、一旦主从复制构建成功,主库当中binlog发生了变化,都会通过dump_T发送信号给IO_T,增强了主从复制的实时性.

    学习来自:B站课程:MySQL主从复制原理 P120-122

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    axis2调用webservice
    JSON: Property 'xxx' has no getter method的解决办法
    JDK中工具类的使用
    Java权限讲解
    JSON的使用
    策略模式
    Tomcat虚拟目录的设置
    extends 与 implements 的区别
    利用正则表达式分割字符串
    给面板添加背景图片
  • 原文地址:https://www.cnblogs.com/tz90/p/14617911.html
Copyright © 2020-2023  润新知