在 MYSQL的启动过程中,可以看到在 mysqld_main() 函数的最后调用了 mysqld_socket_acceptor->connection_event_loop() 函数用来处理MySQL的连接,这里通过源码分析一下MySQL连接的建立与使用过程:
-
在死循环中调用 m_listener->listen_for_connection_event() 等待连接进入
-
如果有连接进入,则调用 precess_new_connection() 处理连接
-
调用 check_and_incr_conn_count() 检查是否有空余连接[当前连接数是否大于 max_connections], 如果没有空余连接, 结束处理流程;
注意:这里允许 max_connections + 1 个连接,最后一个连接是为 super user保留的。
-
如果存在空余连接,则对连接进行处理
-
查看 thread cache 中是否有空闲 thread,如果有,使用 cached thread
-
如果不存在,则创建一个新的线程来处理这个连接
-
线程调用 handle_connection() 线程处理函数,初始化一个 thd 对象,并将其加入 thd list; 并初始化 lex 词法解析器,进行连接身份验证,初始化 thd,准备执行语句。
-
调用 do_command(). 处理用户命令。
Original: https://www.cnblogs.com/juanmaofeifei/p/16146201.html
Author: 卷毛狒狒
Title: MySQL连接的建立与使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590931/
转载文章受原作者版权保护。转载请注明原作者出处!