MySQL源码之mysqld启动
2014-04-27 16:22
337 查看
启动mysqld,并进入listen阶段
函数调用栈:
mysqld_main():
my_init();初始化变量,锁,错误串
my_thread_global_init(): 初始化互斥锁,信号量,线程独享变量
load_defaults();查找my.cnf
sys_var_init();初始化system variables
init_common_variables:初始化mutex,status变量
init_signals:初始化信号量处理
init_server_components:装载innodb引擎
network_init: 初始化网络组件
start_signal_handler:处理信号的线程
execute_ddl_log_recovery:执行innodb的recovery
handle_connections_sockets:开始处理connection请求
my_init():
文件/目录 umask
结构化标准IO的文件handler:MYSQL_FILE
init_glob_errs():初始化global错误文本数组
获取home环境变量
my_thread_global_init():
1. 线程独享变量:
[pthread_key]THR_KEY_mysys来控制线程独享结构体变量[st_my_thread_var:包含线程ID,error,锁等信息],后续都通过
pthread_getspecific在线程内进行获取。
2. init全局互斥锁:THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_charset,THR_LOCK_threads,THR_LOCK_lock,
THR_LOCK_isam,
THR_LOCK_myisam,THR_LOCK_myisam_mmap,THR_LOCK_heap,THR_LOCK_net,
3. init全局信号量:THR_COND_threads
4. 创建一个样本thread,随即就结束【dummy_thread】
load_defaults():
获取my.cnf的候选目录包括:/etc/my.cnf /etc/mysql/my.cnf $MYSQL_HOME/my.cnf ~/my.cnf ./my.cnf
sys_var_init():
系统中所有的system variables都实例化成继承类[sys_var]的static对象,并加入到链表中sys_var_chain all_sys_vars中,
最后通过链接全部加入到[system_variable_hash]hash表中。
init_common_variables():
init了大量的mutex和condition:还没有看明白是啥用途
初始化mysqld.cc定义的全局变量
初始化默认storage engine
所有show status 需要的变量加入到all_status_vars
init_server_components():
初始化user_state,client_state,thread_state.
装载innodb引擎
network_init():
初始化网络接口,建立socket,并开始listener。
start_signal_handler():
创建处理signal的一个独立线程
handle_connections_sockets:
开始处理connection请求,使用epoll socket描述符的方式listen connect request,
并对没有请求连接创建一个THD对象,并作为一个新thread的参数。
函数调用栈:
mysqld_main():
my_init();初始化变量,锁,错误串
my_thread_global_init(): 初始化互斥锁,信号量,线程独享变量
load_defaults();查找my.cnf
sys_var_init();初始化system variables
init_common_variables:初始化mutex,status变量
init_signals:初始化信号量处理
init_server_components:装载innodb引擎
network_init: 初始化网络组件
start_signal_handler:处理信号的线程
execute_ddl_log_recovery:执行innodb的recovery
handle_connections_sockets:开始处理connection请求
my_init():
文件/目录 umask
结构化标准IO的文件handler:MYSQL_FILE
init_glob_errs():初始化global错误文本数组
获取home环境变量
my_thread_global_init():
1. 线程独享变量:
[pthread_key]THR_KEY_mysys来控制线程独享结构体变量[st_my_thread_var:包含线程ID,error,锁等信息],后续都通过
pthread_getspecific在线程内进行获取。
2. init全局互斥锁:THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_charset,THR_LOCK_threads,THR_LOCK_lock,
THR_LOCK_isam,
THR_LOCK_myisam,THR_LOCK_myisam_mmap,THR_LOCK_heap,THR_LOCK_net,
3. init全局信号量:THR_COND_threads
4. 创建一个样本thread,随即就结束【dummy_thread】
load_defaults():
获取my.cnf的候选目录包括:/etc/my.cnf /etc/mysql/my.cnf $MYSQL_HOME/my.cnf ~/my.cnf ./my.cnf
sys_var_init():
系统中所有的system variables都实例化成继承类[sys_var]的static对象,并加入到链表中sys_var_chain all_sys_vars中,
最后通过链接全部加入到[system_variable_hash]hash表中。
init_common_variables():
init了大量的mutex和condition:还没有看明白是啥用途
初始化mysqld.cc定义的全局变量
初始化默认storage engine
所有show status 需要的变量加入到all_status_vars
init_server_components():
初始化user_state,client_state,thread_state.
装载innodb引擎
network_init():
初始化网络接口,建立socket,并开始listener。
start_signal_handler():
创建处理signal的一个独立线程
handle_connections_sockets:
开始处理connection请求,使用epoll socket描述符的方式listen connect request,
并对没有请求连接创建一个THD对象,并作为一个新thread的参数。
相关文章推荐
- mysql 源码学习笔记:mysqld启动流程
- MySQL源码详解一 mysqld启动
- Linux下采用二进制源码安装mysql,并配置使用mysqld命令启动服务
- mysqld_safe启动mysql
- [Mysql启动报错]/etc/init.d/mysqld: line 256: my_print_defaults: command not found
- mysql启动方式:service mysqld start
- MySQL源码安装完成后修改安装路径启动问题
- mysql基础:mysqld_safe 启动执行流程详解
- Linux 单机启动多个mysql 实例(mysqld_multi )
- 【MySQL源码】源码安装和启动mysql
- mysql 5.1.73 免编译安装 -----mysqld_multi 启动报错
- MySQL启动分析 --> /MySQL5.6/sql/mysqld.cc
- [debezium 源码分析] MySqlConnectorTask 启动和拉取数据过程分析
- mysql多实例配置下,用脚本启动mysql时,出现Please read "Security" section of the manual to find out how to run mysqld as root!
- 启动mysql错误解决方案,学会查看错误日志:mysql.sock丢失,mysqld_safe启动报错
- Linux系统下以RPM方式安装mysql-5.7.9【5.7版本以后,启动mysqld服务首次登录需要密码,为root生成的随机密码在错误日志文件/var/log/mysqld.log】
- mysqld_multi单机启动多个mysql
- ubuntu16.0.4下修改MySQL的data目录之mysqld启动报错
- 安装启动Linux安装mysql——源码安装
- 安装mysql,虽成功启动mysqld服务,但进不了mysql并报错