MySQL 5.7: 数据库THD连接管理重构

WL#6407中,其目的是为了解决shutdown mysql实例的问题,不过主要的代码修改却是重构了对数据库连接相关的管理代码重构。本文的目的主要是梳理这些相关的新增代码。

下图是各个新增类直接的关系及简单描述:

1.新增文件:mysqld_thd_manager.cc  mysqld_thd_manager.h, 移除文件sql/global_threads.h

2. 新增THD管理类:Global_THD_manager, 用于管理所有已经注册的线程THD。

3. 针对每个THD,区分两种操作类型,一种是查找类,一种是操作类,分别对应基类Do_THD_Impl 及Find_THD_Impl

通过接口函数来进行调用各个子类

Global_THD_manager::do_for_all_thd_copy  先拷贝thd链表,再对拷贝后的thd执行操作

Global_THD_manager::do_for_all_thd:直接在加锁状态下,操作链表上的THD

Global_THD_manager::find_thd:根据某些条件找到对应THD对象

所有的Do_THD_Impl和Find_THD_Impl的子类,都要重载operator(),以定义对应的调用行为。

4. 从worklog拷贝过来的流程图:

   mysqld main thread

|

|

init_resources(mutex,etc)

|

| – – – – – – – – – – –  – ->create signal thread

|                                                |

|                               Wait for signal

create_handlers/slaves/etc        |

|                             close_connections()

|                                                 |

join signal thread<- – – – – exit thread

|

cleanup_resources()

|

mysqld_exit()

 

时间: 2024-11-10 00:15:09

MySQL 5.7: 数据库THD连接管理重构的相关文章

解析远程连接管理其他机器上的MYSQL数据库_Mysql

在开发过程中,有时候需要远程连接并管理别的机器上的MYSQL数据库,在实现的过程中会遇到一系列的问题,现在以远程访问我自己安装在Ubuntu上的MYSQL数据为例(端口为默认端口3306),说明一下配置步骤及每一步中遇到的问题及相应解决方法:远程连接管理MYSQL,总体上来说有三步:(A为主操作机器,B为远程机器(MYSQL安装在B上,由A访问B)1,在被连接的MYSQL中创建专门的远程连接用户wow: 2,修改被连接的MYSQL的配置文件my.cnf,使此MYSQL不仅仅支持本地IP127.0

新人求解java连接mysql,向数据库添加数据,出错

问题描述 新人求解java连接mysql,向数据库添加数据,出错 package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; public class test{ public static void main(String[] args)throws

MySQL数据库的连接与关闭的示例

MySQL客户机主要用于传递SQL查询给服务器,并显示执行后的结果.可以和服务器运行在同一个机器上,也可以在网络中的两台机器上分别运行.当你连接一个MySQL服务器时,你的身份由你从那台连接的主机和你指定的用户名来决定.所以MySQL在认定身份中会考虑你的主机名和登录的用户名称,只有客户机所在的主机被授予权限才能去连接MySQL服务器.启动操作系统命令后,连接MySQL服务器可以使用如下命令: mysql -h 服务器主机地址 -u 用户名 -p用户密码 其中,各参数的意义如下所示. ★-h:指

选择MySQL数据库进行连接的简单示例_Mysql

一旦获得MySQL服务器的连接,需要选择一个特定的数据库工作.这是因为MySQL服务器可能有一个以上的数据库.从命令提示符,选择MySQL数据库: 这是很简单的选择一个特定的数据库mysql>提示符.选择一个特定的数据库,可以使用SQL命令. 例子: 下面是一个例子,选择数据库称为 TUTORIALS: [root@host]# mysql -u root -p Enter password:****** mysql> use TUTORIALS; Database changed mysql

mysql-在vs10中创建一个网页,如何连接MySQL中的数据库

问题描述 在vs10中创建一个网页,如何连接MySQL中的数据库 百度了一下,让下一个mysql-connection-net-6.9组件,下完安装之后引用using MySql.Data.MySql.Client;,出现 未能找到类型或命名空间名称"Mysql"(是否缺少using指令或程序集引用) 问题 解决方案 先要添加引用,在项目-添加引用中找到程序集,勾选.using不是引用. 解决方案二: 不要弄静态的,没什么意义,写asp吧 解决方案三: 看我的博客,有一篇c#连接mys

java swing mysql 下面的代码无法连接到数据库,插入数据

问题描述 java swing mysql 下面的代码无法连接到数据库,插入数据 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.sql.*; class Test { /*private String driver="com.mysql.jdbc.Driver"; private String url="jdbc:mysql://localhost:3306/tech

MySQL数据库远程连接很慢的解决方案_Mysql

有次同事提出开发使用的MySQL数据库连接很慢,因为我们的MySQL开发数据库是单独一台机器部署的,所以认为可能是网络连接问题导致的. 在进行 ping和route后发现网络通信都是正常的,而且在MySQL机器上进行本地连接发现是很快的,所以网络问题基本上被排除了.以前也遇到过一次这样的问题,可后来就不知怎么突然好了,这次又遭遇这样的问题,所以想看看是不是MySQL的配置问题.在查询MySQL相关文档和网络搜索后,发现了一个配置似乎可以解决这样的问题,就是在MySQL的配置文件中增加如下配置参数

MySQL数据库远程连接开启方法_Mysql

第一中方法:比较详细以下的文章主要介绍的是MySQL 数据库开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是MySQL 数据库开启远程连接的时机操作流程. 1.d:\MySQL\bin\>MySQL -h localhost -u root 这样应该可以进入MySQL服务器 复制代码 代码如下: MySQL>update user set host = '%' where user = 'root'; MySQL&g

MySQL数据库远程连接开启方法

第一中方法:比较详细 以下的文章主要介绍的是MySQL 数据库开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是MySQL 数据库开启远程连接的时机操作流程. 1.d:\MySQL\bin\>MySQL -h localhost -u root 这样应该可以进入MySQL服务器 复制代码代码如下: MySQL>update user set host = '%' where user = 'root'; MySQL&g