zoukankan      html  css  js  c++  java
  • MySQL5.6 基于db的并行复制

    slave的几个类结构:

     
         Master_info:用于IO线程的参数,包括连接master实例的信息。
         Relay_log_info:用于sql线程,表示relay log相关的信息。
         Slave_worker:继承Relay_log_info,包括一个job队列,用于并行的worker线程。
     
    binlog event的类结构:
         
     
    slave启动的函数栈:
         dispatch_command
              start_slave
                   start_slave_threads
                        start_slave_thread
     
         start_slave:初始化master_info和relay_log_info两个对象
         start_slave_threads:启动两个线程,分别是handle_slave_io io线程,handle_slave_sql sql线程。
     
    handle_slave_io: 启动io线程,根据master_info对象的连接信息,连接master主库。
      while(!io_slave_killed(thd,mi))
         request_dump:循环发送dump协议指令到master,接受event写入relay_log.
     
    handle_slave_sql:启动sql线程,
         1. 当没有使用并行复制的时候。
              while (!sql_slave_killed(thd,rli))
                   exec_relay_log_event(thd,rli): 循环从relay_log中读取event,并执行apply。
         
              exec_relay_log_event的调用栈:
                   apply_event_and_update_pos 
                        Log_event::apply_event
                             Query_log_event::do_apply_event
                                  Query_log_event::do_apply_event     
     
         2. 当设置了opt_slave_parallel_workers时,启用了并行复制
              slave_start_workers:初始化relay_log_info中关于mts的变量。
                   slave_start_single_worker:启动多个并发线程。
                        handle_slave_worker:
                             while (!error)
                                   error= slave_worker_exec_job(w, rli):根据jobs_queue中的值,pop出event进行apply。
                                  在Log_event::apply_event的过程中:
                                       1,如果开启了并行:那么会把event分配给worker线程,然后结束
                                       2,如果没有开启并行:则直接执行do_apply_event
                                       3,如果不能并行的,需要wait_for_workers_to_finish所有worker结束后,本线程自己独立执行。
  • 相关阅读:
    Qt中暂停线程的执行(主线程和工作线程共用一把锁,一旦主线程将它锁上,工作线程就无法运行了,这也是一个办法)
    罗振宇 知识就是力量:怎样逼自己成为一个上进的人
    GammaRay 是一个允许你查看 Qt 应用程序甚至在某种程度上修改它的独特应用,可谓是 Debugger 的良好补充
    VSCode高效开发插件
    微软白板Excel xls列号数字转字母
    如何渡过中年危机
    增量数据同步中间件
    N位N进制里有多少个N
    Orchard Core学习一
    Consul做服务发现
  • 原文地址:https://www.cnblogs.com/xpchild/p/3713621.html
Copyright © 2011-2022 走看看