在将OSX升级到Yosemite或El Capitan时,MySQL无法启动。

68

我知道有类似的问题存在,比如MySQL在OSX Yosemite 10.10上与MAMP不兼容。但是,我的电脑上并没有安装MAMP或者XAMPP。

当我尝试从PrefPane启动mySQL时,什么也没有发生。

当我通过命令行尝试使用sudo /usr/local/mysql/support-files/mysql.server start启动mqSQL时,出现以下错误:

Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/mysql/data/adamg.local.pid).

任何形式的帮助都将不胜感激。我可以提供任何必要的文件输出。


1
在Yosemite中使用launchd启动MySQL的详细信息可以在这篇文章中找到。 - davidcondrey
18个回答

78

打开终端:

  1. 检查 MySQL 系统偏好设置面板,如果它显示类似“警告,/usr/local/mysql/data 不是 'mysql' 或 '_mysql' 的所有者”之类的信息

  2. 如果是,请进入 mysql 文件夹:cd /usr/local/mysql

  3. 运行 sudo chown -R _mysql data/

  4. 这将更改 /usr/local/mysql/data 及其所有内容的所有权为用户 '_mysql'

  5. 检查 MySQL 系统偏好设置面板,它应该显示正在自动运行。如果没有,请重新启动。

  6. 另一种确认方法是运行

    netstat -na | grep 3306

它应该输出:

tcp46      0      0  *.3306                 *.*                    LISTEN

查看mysqld进程的拥有者和进程ID:

ps aux | grep mysql

8
谢谢,这个方法在我使用的OSX 10.11 El Capitan系统中也有效。 - Jeremy Carlson
这已经是我第二次在升级我的另一台机器时遇到这个答案了。再次感谢! - Catfish
我也遇到了同样的问题,但是这个方法解决了它!我没有升级任何东西,为什么之前它还能工作?是有什么改变了所有权吗? - navid
在将MySQL从5.6升级到5.7后,对于我而言,在El Capitan上运行sudo chown -R _mysql data/解决了问题... 只有一件事要注意... 我不得不在活动监视器中强制退出所有的mysqld进程...谢谢 - Paulo Griiettner

60

简而言之,您需要创建一个启动文件。因此,请从终端开始:

sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist

(如果您不熟悉vi,则按i以开始插入文本)

这应该是您文件的内容:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <true />
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/mysql/bin/mysqld_safe</string>
      <string>--user=mysql</string>
    </array>
  </dict>
</plist>

按下 esc 键,然后输入 :wq!enter

然后您需要为该文件设置正确的权限并将其设置为启动时加载。

sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist 
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist 
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

就是这样了。


2
文件的前两行应该是:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> - tfentonz
1
我实际上不得不选择我的答案,以避免混淆。这个问题不是关于让mySQL自动启动的。相反,它是因为需要升级mySQL。尽管如此,您的答案确实适用于前者。 - Adam_G
你很幸运...收到了一个“无效的属性列表”错误。 - jwenting
@jwenting 这意味着您输入/复制了错误的内容。该文件格式不正确。 - Ares
@Ares 我刚输入了它,仔细检查了一遍。我能想到的唯一可能是文件采用了错误的编码方式,但使用 vi 的话这种情况不大可能发生。 - jwenting
显示剩余4条评论

34
在我的情况下,我通过进行一些权限更改来解决它:
sudo chown -R _mysql:_mysql /usr/local/var/mysql
sudo mysql.server start

我希望这能帮助其他人...

注意: 根据 Mert Mertin 的评论:

对于El Capitan,应该是sudo chown -R _mysql:_mysql /usr/local/var/mysql


1
谢谢,对我有用!我正在根据homebrew修复权限问题,但它与安装在/usr/local的其他东西不兼容。顺便说一下,我的命令是:sudo chown -R _mysql:_mysql /usr/local/mysql/ - rlorenzo
1
对于El Capitan,命令是sudo chown -R _mysql:_mysql /usr/local/var/mysql。 - Mert Metin
1
我不得不运行 sudo chown -R _mysql:_mysql /usr/local/mysql,但仍然没有起作用。 - Siddharth

26

4
“sudo /usr/local/mysql/support-files/mysql.server start”是一篇文章中提到的答案,该文章解释了在当前版本的MySQL中自启脚本失败的原因。若要让MySQL在OSX开机时自动加载,请查看:https://dev59.com/cF8d5IYBdhLWcg3wv0Yg#26492593。 - Justin
2
值得注意的是,来自mysql.com的安装程序将崩溃并显示“安装失败”消息。实际上,软件本身已经成功安装了。唯一的问题在于“重新启动时启动MySQL”的脚本。@Ares答案中提到的与plist相关的提示(也在Cool Guides文章中提到)可以解决这个问题。 - Trutane

7

请从命令行执行以下命令...

sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

sudo launchctl unload -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

然后使用以下命令启动mysql服务器

sudo /usr/local/mysql/support-files/mysql.server start

5

您只需要创建用户mysql(mysql安装脚本会创建 _mysql)

sudo vipw

复制包含_mysql的行

将复制的行中的_mysql改为mysql

sudo /usr/local/mysql/support-files/mysql.server start
Starting MySQL
.. SUCCESS!

5

.pid 是正在运行的 MySQL 服务器实例的进程编号。当 mysql 运行时,它将出现在数据文件夹中,并在 mysql 关闭时自动删除。

如果 OSX 操作系统升级且在升级 之前 没有正确关闭 mysql,则当 mysql 启动时会因为 .pid 文件而退出。

你可以尝试一些技巧,http://coolestguidesontheplanet.com/mysql-error-server-quit-without-updating-pid-file/ 如果这些都不起作用,则需要重新安装。


3
重新安装修复了问题,因为安装程序创建了一个新的MySQL实例,并且符号链接 /usr/local/mysql 现在指向一个没有现有pid的数据目录。
值得注意的是,mysql prefpane 和 mysql.server 脚本使用主机名作为pid,因此更改主机名可能会导致此问题出现。
虽然prefpane已经过时了,但对于想要启动/停止MySQL的人来说,它是一个不错的GUI,即使自动启动功能不起作用。
我采取了混合方法,将我的MySQL安装脚本适应了Launchd以自动启动MySQL,但plist实际上调用mysql.server脚本。这样,可以继续使用prefpane随需启动/停止MySQL,并且尝试进行简单的MySQL重新启动不会太令人困惑。
这是一个仅启用Yosemite上已经安装了MySQL的Launchd行为的脚本: https://raw.githubusercontent.com/MacMiniVault/Mac-Scripts/master/mmvMySQL/YosemiteLaunchd.sh 这是处理MySQL整个自动安装的脚本: https://raw.githubusercontent.com/MacMiniVault/Mac-Scripts/master/mmvMySQL/mmvmysql.sh

非常感谢@Jon。我尝试了上面所有的方法,但都没有让mysql在我的电脑上工作。所以我彻底清理了系统中与mysql有关的所有内容,并运行了您的安装脚本,这真的帮了我大忙!它就像是一个救命稻草! - yeelan

2
我在Mac上使用MySQL时遇到了类似的问题(Mac Os X无法启动MySQL服务器,原因是255,还出现“ERROR!The server quit without updating PID file”)。经过长时间的尝试和错误处理后,我最终只需执行以下操作即可恢复文件权限:

* 启动Disk Utilities.app
* 在左侧面板中选择我的驱动器
* 点击“修复磁盘权限”按钮

这对我起作用了。

希望这能帮助其他人。


2

如果您尝试安装新版本,有时会丢失先前的数据。请在终端中使用以下命令,我保证mySql将立即开始运行。

sudo /Applications/XAMPP/xamppfiles/bin/mysql.server start

请记住,它会要求您输入机器密码而不是mysql密码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接