前言

个人配置环境,本地习惯用 xampp ,只需要启动控制面板就可以了,而服务器端由于是 Linux 系统,有一套完备的指令集合很方便启动和关闭,也不需要去操心。这次在 windows server 下对 MySQL 的重启过程,让我对进程和服务有了更深的了解。特意通过 win+R -> services.msc 打开 windows 服务观察了一下,本地的 xampp 并没有注册服务(Apache,MySQL),而 windows server 上使用的 phpStudy 注册了服务(服务器上安装的 phpStudy 版本可以切换运行方式,是否以服务运行)。本地下载安装最新版本的 phpStudy(与服务器上的版本不同),查看了一下,本地依然未注册服务。猜测集成环境软件本身在安装时,判断了宿主机的类型,根据不同的类型安装了不同的版本。

通过任务管理器切换查看进程和服务(右击进程转到服务或右击服务转到进程)发现,每个服务(正在运行状态)都会有一个对应的进程,但进程不一定有对应的服务。本地的 xampp 在关闭(得关闭对应的模块)之后,进程就没了,而在 Windows server 服务器上,phpStudy 停止后,进程没了,同时,服务状态切换成了已停止。进程跟服务之间存在先后关闭的关系,服务对进程有依赖,需要先关闭服务,再考虑关闭进程(关闭服务会自动关闭对应的进程),所以当你通过任务管理器关闭某个服务对应的进程时,会报错:访问拒绝 或者 没有此任务实例运行。前者还算正常,后者就不知道怎么搞了,能做的只有重启。

过程

确定使用的 MySQL 版本

因为之前不知道本地与服务器上的相关软件的不同,加上服务器上的环境比较复杂(c 盘和 d 盘都分别安装了 phpStudy,d 盘还单独安装了 MySQL 5.5),搞了一天也没出结果,很头大。因为同时存在多个环境、多个版本的 MySQL, 我需要确定之前使用的 MySQL(多个不同版本的 MySQL,存储方式和存储数据的位置不同,就存在了多个数据库环境)。在 MySQL 存储数据的目录 data 下,找到对应的数据库,发现里面的文件,主要以表名开头,扩展名 frm,MYD,MYI。记得有新增几张表,猜想有可能存在相对应的文件。全局搜索,并没有。一脸懵逼。此路不通,想只能通过切换 MySQL 版本,然后用 Navicat 连接查看来判断了。

切换 MySQL 版本

因为切换需要关闭现有版本的 MySQL,并且不知道存在服务的进程不能直接关闭,所以在任务管理器里直接结束进程得到 访问拒绝 的回应后,就开始搜索通过其他方式强制关闭进程的方式。

查看进程对应的进程号(当然可以通过 任务管理器 -> 查看 -> 选择列 -> 勾选 PID(进程标识符) 的方式直接查看)

# 查找出某个端口的PID
netstat -ano | findstr "3360"
# 或根据可执行文件名查找
tasklist | findstr "mysql"

MySQL 对应可执行文件 mysqld.exe,而 Apache 对应可执行文件 httpd.exe(我这个版本是这样子的)。

结束进程

因为直接结束进程会报错,当时想的就是怎么样杀死进程,没有考虑为什么报错。

#杀死进程
tskill PID 

#如果存在这个指令的话
ntsd -c q -p PID

#taskkill 指令
taskill /f /pid PID
taskkill /f /im  进程名

几乎试错了所有的解决方案,都不行。

尝试关闭 MySQL 服务

既然无法从进程下手,就想着关闭服务,是不是就可以了呢?

注册和删除服务

# 删除服务,MySQL57 为注册服务时的名称
sc delete MySQL57
# mysqld 删除
mysqld --remove MySQL57

# 注册服务,mysql5.6 为注册服务名
mysqld --install mysql5.6 
# 指定默认的配置文件
mysqld --install MySQLXY --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"

期间,启动 MySQL 还报错了:1067 进程意外终止,我的是因为已注册了其他的 MySQL,将其停止即可。

实在不行可以重启,不过要保证,同一个服务,如 MySQL ,只能有一个启动类型为自动。

然后就好了,之后又碰到 iis 服务器启动不了,看了一下,原来是 phpStudy 中的 apache 服务开启了,将其关闭之后重试,启动类型改成手动,或禁用。仍然启动不了 iis, 猜测可能是服务器版本较低,有漏洞或者版本不兼容,重启,OK。

文章目录