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

文章目录

      • 首先说下我的版本信息
      • 具体问题
        • 发现问题
          • 问题一:没有/tmp/mysql.sock文件
          • 问题一的原因:
    • 主要问题
    • 解决方案

首先说下我的版本信息

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

你可能感兴趣的:(mysql,macos)