一次解决MySQL无法启动的全过程
现象:
启动Mysql提示ERROR! The server quit without updating PID file (/usr/local/var/mysql/xxxx.local.pid).
解决过程:
1、查看mysql错误日志:打开/usr/local/var/mysql/xxxx.err或者xxxx.local.err文件。
2018-05-19T23:47:17.254324Z 0 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
2018-05-19T23:47:17.254335Z 0 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2018-05-19T23:47:17.254361Z 0 [ERROR] Aborting
2、问题应该是某个程序占用了mysql的默认端口3306。
3、查看端口使用情况lsof -i:3306,发现是一个用户名为_mysql启动了mysqld指令占用了3306,感觉现象非常奇怪,不清楚为什么会有这个用户组,为什么会启动mysqld,由于这个电脑是公司其他同事转移资产到的我名下,所以有可能是之前用户或者公司it装了什么服务导致的。
4、首先尝试干掉进程:sudo kill xxxx,结果发现当kill后,还会重新启动。
5、尝试修改mysql默认启动端口,Baidu上有人告诉修改/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist文件
添加<string>--port=3307</string>保存,先重新启动mysql服务,发现问题依然存在,发现配置没有起作用,默认端口依然是3306,然后考虑重新启动电脑,看看是否可以修改占用默认端口的配置。
6、重启后再次查看3306端口占用情况,发现确实不存在了。但是发现启动mysql服务时,依然存在问题:
2018-05-20T00:38:40.569748Z 0 [ERROR] Could not open unix socket lock file /tmp/mysql.sock.lock.
2018-05-20T00:38:40.569759Z 0 [ERROR] Unable to setup unix socket lock file.
2018-05-20T00:38:40.569767Z 0 [ERROR] Aborting
仔细观察发现,这个占用和plist中的mysql配置一样的,所以可以确定每次启动计算机后,会按默认配置执行一个mysqld。
7、不清楚为什么会按com.oracle.oss.mysql.mysqld.plist配置执行mysqld,于是把注意力放在了Mac启动上。
8、Mac的启动原理是:
1)mac固件激活,初始化硬件,加载BootX引导器。
2)BootX加载内核与内核扩展(kext)。
3)内核启动launchd进程。
4)launchd根据 /System/Library/LaunchAgents,/System/Library/LaunchDaemons,/Library/LaunchDaemons,Library/LaunchAgents,~/Library/LaunchAgents里的plist配置,启动服务守护进程。
看到这里就明白了,原来LaunchDaemons里面放的是Mac启动时的一些启动服务,
9、System/Library和/Library和~/Library目录的区别:
1)/System/Library目录是存放Apple自己开发的软件;
2)/Library目录是系统管理员存放的第三方软件;
3)~/Library/是用户自己存放的第三方软件;
10、System/Library和/Library和~/Library目录的区别:
1)LaunchDaemons是用户未登陆前就启动的服务(守护进程)
2)LaunchAgents是用户登陆后启动的服务(守护进程)
11、有了上面的结果,于是把注意力放在了com.oracle.oss.mysql.mysqld.plist上,每个Mac启动中都有么,这个是如何添加的。首先查看了家里的其他苹果电脑,发现都没有这个plist文件,于是开始研究这个文件的产生原因。
12、经过Baidu怀疑这个文件应该是之前用dmg安装包安装的mysql产生的,在设置中也发现了残留信息
于是果断把自动启动去掉,重启计算机。
13、重启后,发现无论是3306还是3307端口上都没有mysql服务了,于是运行mysql.server start,这次终于看见了Starting MySQL . SUCCESS!
14、删除com.oracle.oss.mysql.mysqld.plist文件,重启电脑后,发现设置中仍然还有MySQL的控制选项。
15、MySQL dmg安装方式的卸载方法:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/MySQL.* (删除设置面板上的MySQL图标)
sudo rm -rf ~/Library/PreferencePanes/MySQL.* (删除设置面板上的MySQL图标)
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
vim /etc/hostconfig (and removed the line MYSQLCOM=-YES-)
至此,这个问题算是完美解决了。