操作系统 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)
提示无法通过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