据说 MySQL 处理连接,为每个与服务器的连接分配一个线程,并且 MySQL 是一个具有多个线程的单进程。
现在在我的 localhost 中。
有两个到 mysql 的连接。
sudo ps -el |grep mysql
4 S 0 892 1 0 80 0 - 1084 - ? 00:00:00 mysqld_safe
4 S 111 1338 892 0 80 0 - 172432 - ? 00:00:21 mysqld
0 S 1000 14903 14892 0 80 0 - 27406 - pts/1 00:00:00 mysql
0 S 1000 14937 14922 0 80 0 - 27375 - pts/2 00:00:00 mysql
我们来搜索一下892的ps树。
pstree 892 -p
mysqld_safe(892)───mysqld(1338)─┬─{mysqld}(1361)
├─{mysqld}(1362)
├─{mysqld}(1363)
├─{mysqld}(1364)
├─{mysqld}(1365)
├─{mysqld}(1366)
├─{mysqld}(1367)
├─{mysqld}(1368)
├─{mysqld}(1369)
├─{mysqld}(1370)
├─{mysqld}(1477)
├─{mysqld}(1478)
├─{mysqld}(1479)
├─{mysqld}(1480)
├─{mysqld}(1500)
├─{mysqld}(1518)
├─{mysqld}(2611)
└─{mysqld}(11598)
有 14903 和 14937 线程吗?它们属于哪个进程?这意味着 MySQL 服务器处理连接,为每个到服务器的连接分配一个线程。
现在对于 mysql 客户端的 14903 进程,mysql 服务器为该连接分配一个线程,现在 1361-1370 范围内的哪一个或 1477-1499 范围内的哪一个或 1500、1518、2611、11598 处理 14903 的连接?
答案1
你需要区分mysqld
和mysql
。后者是客户用于管理服务器的程序。
答案2
输出ps -ef | grep mysql
清楚表明这些进程是 mysql 客户端
0 S 1000 14903 14892 0 80 0 - 27406 - pts/1 00:00:00 mysql
0 S 1000 14937 14922 0 80 0 - 27375 - pts/2 00:00:00 mysql
服务器进程以d
字母结束。