您的位置:首页 > 博客中心 > 数据库 >

MySQL5.6 基于db的并行复制

时间:2022-03-10 17:04

slave的几个类结构: gxlsystem.com,布布扣 gxlsystem.com,布布扣
       Master_info:用于IO线程的参数,包括连接master实例的信息。      Relay_log_info:用于sql线程,表示relay log相关的信息。      Slave_worker:继承Relay_log_info,包括一个job队列,用于并行的worker线程。   binlog event的类结构:      gxlsystem.com,布布扣gxlsystem.com,布布扣   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结束后,本线程自己独立执行。

MySQL5.6 基于db的并行复制,布布扣,bubuko.com

热门排行

今日推荐

热门手游