我在Macbook上,在终端上,我尝试查找哪个应用占用了端口3306。我运行命令:
sudo lsof -i TCP:3306
我得到了输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 47730 _mysql 19u IPv6 0x736b0ff006adfb97 0t0 TCP *:mysql (LISTEN)
然后,我用sudo kill -9 47730
终止了该进程。它执行没有错误。
但是然后,我再次运行sudo lsof -i TCP:3306,我得到了:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 47759 _mysql 19u IPv6 0x736b0ff006ae0cd7 0t0 TCP *:mysql (LISTEN)
使用不同的PID重新启动mysql进程,为什么?如何在Macbook上永久终止MySQL进程?
(mysql版本8.0.11)
答案 0 :(得分:1)
阅读https://dev.mysql.com/doc/refman/8.0/en/osx-installation-launchd.html
MacOS上的MySQL Server配置为启动守护程序,并启用了“ KeepAlive”选项。这意味着如果停止运行,例如当您使用kill -9
时,MacOS将自动重启它。
您应该使用“系统偏好设置”小部件(显示在我链接到的手册页上)或launchctl
停止它。
如果您使用brew
或通过其他方式安装了MySQL Server,则它可能不受launchctl
的管理。
例如,某些人使用supervisord
来运行MySQL Server,在这种情况下,您可以使用supervisorctl stop mysql
来停止它。
使用非启动方法运行MySQL Server时,它可能正在运行mysqld_safe,这是一个脚本,如果被杀死或崩溃,它将自动重新启动mysqld。这就是为什么您必须正确关闭mysqld_safe的原因。
当我在Macbook上运行MySQL Server的测试实例时,我用dbdeployer启动它们,这会启动mysqld_safe进程。
对于OSS,MacOS可能是一个令人困惑的环境,因为有多种获取和运行它的方法,并且每种都有其自己的管理过程的方法。
答案 1 :(得分:0)
该过程似乎由另一个用户拥有 _mysql
。要杀死它,请尝试
sudo -u _mysql -c kill -9 47730
-u
适用于用户 -c
用于命令 sudo kill -9 47730
(以root身份运行,但这有点过头了)brew services stop mysql
来更正常地关闭该服务。那就是如果您使用的是homebrew