首先说下我的版本信息
操作系统 MacOS Big Bur 11.2.2
Mysql 8.0.24
说明:我安装的是通过官方的 dmg 包安装的,并不是通过 Homebrew,如果是 Homebrew 安装出现的问题也可以作为参考。
当前日期 2021 年 4 月 21 日
如果想直接测试结果可以跳到解决方案,前面话多. 哈哈
具体问题
自从更新了 Big Bur 系统后,许多开发环境都出现了问题。之前测试项目需要用到 Mysql,我就习惯性的点击偏好设置里的 Mysql,start mysql server(我本人不是搞后端的,所有没有将 Mysql 设置为自启动),但是点击了好几次无法启动 Mysql 服务,由于情况比较着急就直接Google了下,用命令启动了Mysql 服务
应急启动命令是:
$ sudo /usr/local/mysql/support-files/mysql.server start
我能够启动成功。并且偏好设置里的 Mysql 也显示为 running 状态
当我使用完 Mysql 后,不出意外,同样无法通过偏好设置里的 Mysql 点击 stop MySql server 停止 Mysql 服务。但是我并不是很关系这个。直到最近在学习 SpringBoot,需要用到数据库。这个问题才被我重视。
发现问题
首先在没有启动 mysql server 的情况下试了试进入数据的命令
# xxx @ xxxMacBook-Pro in ~ [9:57:07]
$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
问题一:没有 /tmp/mysql.sock 文件
提示无法通过 socket 登录 Mysql。
去看了看 /tmp/ 目录,发现确实没有 /tmp/mysql.sock 文件。
但是当启动了(通过上面的启动命令,必须有 Root 权限)mysql server 后,/tmp/mysql.sock 文件就会生成。
# xxx @ xxxMacBook-Pro in ~ [10:02:28]
$ ps aux|grep mysql
xxx 3629 0.0 0.0 4277640 600 s003 R+ 10:02上午 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox mysql
_mysql 3610 0.0 2.1 4923136 355552 ?? Ss 10:02上午 0:00.52 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so
# xxx @ xxxMacBook-Pro in ~ [10:02:44]
$ ls /tmp
com.apple.launchd.A5Mtzx3D97 foo.err mysql.sock mysqlx.sock powerlog
com.google.Keystone fseventsd-uuid mysql.sock.lock mysqlx.sock.lock
问题一的原因:
/tmp/mysql.sock 文件是启动 mysql server 生成的,只有当 /tmp/mysql.sock 存在,才能通过 mysql -uroot -p 命令登入 Mysql 。也就是只有当 Mysql 服务启动,才能通过 Socket 登入Mysql。
之前查了好多这个问题,好多帖子网上都说是 my.cnf 文件的问题,而我根本没有这个文件。不知道和他们是不是一个问题。反正误导我好久,必须吐槽。
主要问题
上面的问题只是自己大意没有启动 mysql server。
关键问题是不能点击启动。
使用 Root 权限进入 /usr/local/mysql/data 下:有一个名为 xxxMacBook-Pro.local.err 的日志文件,里面记录了一些 Mysql 的错误,大部分提示都是下面的路径
/usr/local/mysql/bin/mysqld
查了下该路径(Mysql 官网对 mysqld 的介绍),貌似并不是该问题。
于是又去找其他的错误日志。最终在前面的 /tmp/ 目录下发现了一个
/tmp/foo.err
其中的错误信息都是这样的
NSAppleScriptErrorBriefMessage = "/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist: CoulLoad failed: 119: Service is disabled";ysql.mysqld.plist: Service is disabled
我去看了自己的 /Library/LaunchDaemons/ 目录,发现我的该目录下并没有com.oracle.oss.mysql.mysqld.plist 文件。该目录下的都是一些自启动的文件。并且还发现xxxMacBook-Pro.local.err 文件中也记录了 Mysql 无法链接到com.oracle.oss.mysql.mysqld.plist 文件之类的相关信息。
不明所以,就直接 copy 到 Google,最终让我发现了 Mysql 官方的介绍
发现 com.oracle.oss.mysql.mysqld.plist 文件是用于启动 Mysql 启动守护程序
我大胆推测,偏好设置中 Mysql 如果需要通过点击启动和停止 Mysql 就必须Mysql 启动守护程序运行。所有参照官方的方法
解决方案
手动加载启动的文件。
shell> cd /Library/LaunchDaemons
shell> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
然后,点击偏好设置中的 start mysql server。发现并没有什么用。诶~。
哈哈,我也是个憨批,前面说了,/Library/LaunchDaemons 目录下的是自启动文件啦。当然得重启下电脑,该程序才能启动啦。
重启电脑后,发现成功。
每个人的环境都不相同,不一定能过解决你的问题。
最后提供一个 Mysql 卸载的脚本
#!/bin/bash
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*
sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /private/var/db/receipts/*mysql*
参考
https://dev.mysql.com/doc/refman/8.0/en/mysqld.html
https://dev.mysql.com/doc/mysql-osx-excerpt/8.0/en/osx-installation-launchd.html
http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/#mysql