MySQL半同步复制--master dump线程1

dispatch_command->:COM_BINLOG_DUMP:->com_binlog_dump(thd, packet, packet_length)
    // 检查当前连接是否有复制权限,这对应于我们创建复制账号时是否赋予了该账号REPLICATION_SLAVE权限。
    //如果没有复制权限,直接结束运行,否则继续运行
    check_global_access(thd, REPL_SLAVE_ACL);
    READ_INT(pos, 4);//从packet中读取position,指明了从哪里开始复制
    READ_INT(flags, 2);
    READ_INT(thd->server_id, 4);//从库的server_id
    //从库的UUID,从库的slave IO线程连接master后会将自己的UUID通过SET @slave_uuid=uuid
    //保存到当前连接的用户变量@slave_uuid中,所以get_slave_uuid函数只需要取出当前连接的用户变量就可以了
    get_slave_uuid(thd, &slave_uuid);
    //检查该从库之前是否有对应的master dump线程没有关闭,如果有则将其关闭,master dump线程发完binlog
    //事件后会进入等待状态,如果此时slave停止,然后重新连接到master,那么主库上会有2个dump线程与slave
    //对应,一个是之前建立的处于等待binlog更新的dump线程,另一个是新建立连接的dump线程,
    //此时之前建立的dump线程需要关闭
    kill_zombie_dump_threads(&slave_uuid);
    //从库发送binlog事件
    mysql_binlog_send(thd, thd->strdup(packet + 10), (my_off_t) pos, NULL, flags);
    //将从库的信息注释掉,如果执行到这里,说明复制工作结束
    unregister_slave(thd, true, true/*nee

你可能感兴趣的:(MySQL源码分析,MySQL源码研究)