MacOS的Mysql(dmg安装)偏好设置启动失效

首先说下我的版本信息

操作系统 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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值