17站长网

17站长网 首页 数据库 Mysql 查看内容

MySQL连接查询流程源码

2023-3-16 15:18| 查看: 1570 |来源: 互联网

main |-mysqld |-my_init // 初始话线程变量,互斥量 |-load_defaults // 获取配置 |-init_common_variables // 初始化变量 |-init_server_compone ...

main

    |-mysqld

        |-my_init // 初始话线程变量,互斥量

        |-load_defaults // 获取配置

        |-init_common_variables // 初始化变量

        |-init_server_components // 初始化插件

        | |-plugin_init

        | | |-plugin_initialize

        | |-initialize_storage_engine

        |-network_init // 监听网络

        |-grant_init

        |-servers_init

        |-udf_init

 

插件启动:

 

main

    |-mysqld_main

        |-init_server_components

            |-plugin_init

                |-plugin_initialize

                    |-ha_initialize_handlerton

                        |-innobase_init

 

登录过程:

 

main

    |-mysqld_main

        |-network_init // 建立socket监听,一个针对网络,一个针对unix域

        |-handle_connections_sockets

            |-poll

            |-mysql_socket_accept // 和客户端建立连接

            |-create_new_thread // 针对每个socket连接建立一个新的线程

                |-create_thread_to_handle_connection

                    |-waiting_thd_list->push_back(thd);mysql_cond_signal(&COND_thread_cache); // 已有连接处理线程时,通过信号唤醒,处理线程函数为pfs_spawn_thread

                    |-mysql_thread_create(启动的线程执行函数,inline_mysql_thread_create)

                        |-spawn_thread_v1

                            |-pthread_create(pfs_spawn_thread)

 

处理连接:

 

pfs_spawn_thread

    |-handle_one_connection

        |-do_handle_one_connection

            |-MYSQL_CALLBACK_ELSE(thread_scheduler, init_new_connection_thread, (), 0)

            | |-init_new_connection_handler_thread

            |-thd_prepare_connection

            | |-login_connection // 判断是否可以login,不可以则断开连接返回错误

            | | |-check_connection

            | | | |-acl_authenticate

            | | | |-do_auth_once

            | | | |-native_password_authenticate

            | | | |-server_mpvio_write_packet

            | | | | |-send_server_handshake_packet // 发送handshake包到客户端

            | | | | |-my_net_write

            | | | | | |-net_write_buff // 将数据写入到内存

            | | | | |-net_flush // 将内存中数据发送到网络

            | | | |-server_mpvio_read_packet // 从客户端接收Login Request信息

            | | | |-my_net_read

            | | |-Protocol::end_statement

            | | |-Protocol::send_ok

            | | |-net_send_ok // 发送response ok

            | | |-my_net_write

            | |-prepare_new_connection_state

            |-do_command

                |-dispatch_command

                    |-mysql_parse

 

select命令:

 

pfs_swpawn_thread

    |-handle_one_connection

        |-do_handle_one_connection

            |-do_command

                |-dispatch_command

                    |-mysql_parse

                        |-parse_sql

                        | |-MYSQLparse

                        |-mysql_execute_command

                            |-select_precheck

                            | |-check_table_access

                            |-execute_sqlcom_select

                            | |-open_normal_and_derived_tables

                            | |-open_tables

                            | | |-open_and_process_table

                            | | |-open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx)

                            | | |-Table_cache::get_table

                            | | |-get_table_share_with_discover

                            | | | |-get_table_share

                            | | | |-open_table_def

                            | | |-my_malloc // 申请表数据结构

                            | | |-open_table_from_share

                            | | |-handler::ha_open

                            | | |-ha_innobase::open

                            | | |-dict_table_open_on_name

                            | | |-dict_load_table

                            | | |-btr_pcur_is_on_user_rec

                            | | |-dict_load_table_low

                            | | | |-dict_mem_table_create

                            | | |-fil_space_for_table_exists_in_mem

                            | | |-fil_open_single_table_tablespace // 打开表空间文件

                            | |-mysql_handle_derived

                            |-handle_select

                                |-mysql_select

                                    |-mysql_prepare_select

                                    | |-JOIN::prepare

                                    |-mysql_execute_select

                                        |-JOIN::exec

                                            |-select_send::send_result_set_metadata

                                            | |-Protocol::send_result_set_metadata

                                            |-do_select

                                                |-sub_select

                                                    |-evaluate_join_record

                                                        |-end_send

                                                            |-select_send::send_data

                                                                |-Protocol::write


本文最后更新于 2023-3-16 15:18,某些文章具有时效性,若有错误或已失效,请在网站留言或联系站长:17tui@17tui.com
·END·
站长网微信号:w17tui,关注站长、创业、关注互联网人 - 互联网创业者营销服务中心

免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!

17站长网微信二维码

始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!

扫一扫,关注站长网微信

大家都在看

    热门排行

      最近更新

        返回顶部