前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql.5.5 从启动到接收command

Mysql.5.5 从启动到接收command

原创
作者头像
马说
修改2021-07-22 10:02:51
4710
修改2021-07-22 10:02:51
举报
文章被收录于专栏:Java 汇总Java 汇总

Mysql.5.5

#THD : thread handle

1.mysqld.cc mysql 启动服务的类

# main() -4295 调用以下方法

- init_common_variables()

- init_server_components():

- init_ssl()

- network_init()

- start_signal_handler() 创建pid 文件

- mysql_rm_tmp_tables() 删除 临时表 文件

- acl_init() 初始化访问控制列表

- servers_init() 初始化 servers 缓存,从servers表中读取,放入到缓存中

- init_status_vars()

- init_slave() 初始化从节点

- execute_ddl_log_recovery() 执行DDL 恢复服务器

- create_shutdown_thread()

- start_handle_manager()

- handle_connections_sockets() ****

- clean_up(1)

- clean_up_mutexes()

- my_end()

# init_server_components():

-- table_cache_init 初始化表缓存

-- table_def_init 初始化表定义缓存

-- hostname_cache_init 初始化 hostname 缓存

-- query_cache_result_size_limit 设置查询缓存返回的数据量大小限制

-- query_cache_set_min_res_unit 设置查询缓存递增最小单元

-- query_cache_init 初始化查询缓存,根据参数标记设置是否开启查询缓存

-- query_cache_resize 重置查询缓存大小

-- init_slave_list 初始化 从服务器 的hash 表

-- xid_cache_init XA 事务ID缓存

-- 初始化binlog ,如果开启主从复制功能

-- process_key_caches 初始化 key cache

-- ha_init() 初始化变量,事务、savepoint

-- 初始化 存储引擎

-- 初始化 事务日志

-- ha_recover() 恢复数据操作

-- ft_init_stopwords() 停用词

-- init_max_user_conn(); 最大连接数

-- init_update_queries(); 初始化 SQL命名标识符,在接收到SQL命令时,检查是否支持

# handle_connections_sockets()

调用:

- create_new_thread() 创建一个线程,处理一个连接,并将该thread handler 放入到调度器的队列中

关键代码:thread_scheduler.add_connection(thd); 实际调用了 create_thread_to_handle_connection

# create_thread_to_handle_connection()

代码语言:javascript
复制
    ------------------------------------------------------------
    if ((error=pthread_create(&thd->real_id,&connection_attrib,
                              handle_one_connection,     调用处理连接的函数sql_connect.cc
                              (void*) thd)))
    ------------------------------------------------------------

调用:

- handle_one_connection() 启动一个线程处理请求

# init_common_variables() 初始化变量

调用:

- 创建 rpl_filter 复制过滤器,binlog_filter log 过滤器

- init_thread_environment() 初始化 锁,条件变量

- mysql_init_variables() 初始化一堆的变量

- mysql_bin_log.init_pthread_objects() 初始化 日志文件 锁|条件变量

- 初始化 .pid 文件

- add_status_vars() 初始化 状态 数组,SHOW STATUS 将输出该数组中的状态值

- mysqld\get_options()

# get_options()

调用:

- handle_options() 检查 参数选项

- 根据 system_variables 初始化 一堆的全局变量

- one_thread_per_connection_scheduler() 创建 线程调度器

2.sql\sql_connect.cc 处理客户端连接

# handle_one_connection() 线程处理 一个连接,接收客户端请求,处理命令

调用:

- setup_connection_thread_globals()

- prepare_new_connection_state

- do_command()

# prepare_new_connection_state() 初始化 THD 来处理 queries

# init_max_user_conn()

3.sql\sql_parse.cc 解析SQL类

# init_update_queries 初始化 sql_command_flags

# do_command()

调用:

- dispatch_command() 分发执行SQL命令,这是最牛逼的方法了

4.sql\scheduler.cc

# one_thread_per_connection_scheduler() 初始化一个线程调度器,一个线程处理一个连接请求,5.6 增加了线程池

代码语言:javascript
复制
     --------------------------------------------------------------------
     void one_thread_per_connection_scheduler(scheduler_functions* func)
     {
       func->max_threads= max_connections;
       func->add_connection= create_thread_to_handle_connection; 初始化 添加 thd 方法 ,指向 mysqld::create_thread_to_handle_connection 函数
       func->end_thread= one_thread_per_connection_end;
     }
     --------------------------------------------------------------------

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档