【问题标题】:How to auto-load MySQL on startup on OS X Yosemite / El Capitan如何在 OS X Yosemite / El Capitan 上启动时自动加载 MySQL
【发布时间】:2014-12-16 01:40:02
【问题描述】:

升级 OS X 后,我安装的 MySQL 在启动时停止加载。

这个walk-through on MySQL 说:

"启动项安装添加一个变量 MYSQLCOM=-YES- 到 系统配置文件 /etc/hostconfig.如果你想禁用 MySQL自动启动,将此变量改为MYSQLCOM=-NO-。"

所以,我打开了那个文件,上面写着:

# This file is going away 
AFPSERVER=-NO- 
AUTHSERVER=-NO-
TIMESYNC=-NO-
QTSSERVER=-NO-
MYSQLCOM=-YES-

我假设 OSX 开发人员添加了 # This file is going away,但我不确定。

如果是这样,在 OSX Yosemite 上启动 MySQL 的正确方法是什么?

【问题讨论】:

  • 还能手动启动MySql吗?
  • 我觉得这个问题可能更适合Ask Different
  • 这本身不是一个编程问题,但由于 Mac 主要用作个人计算机,因此绝大多数试图在 Mac 上启动 MySQL 的人都是开发人员。所以这个问题可能与许多 SO 用户有关。
  • 昨天在这里得到了回答:MySQL does not start in OSX Yosemite 10.10
  • @dcc 这个问题/答案是如何在重启后启动 MySQL(因为 GUI 工具不会这样做)。我的问题是如何让 MySQL 在 OSX 启动时加载。

标签: mysql macos osx-yosemite startup osx-elcapitan


【解决方案1】:

接受的答案无法自动启动我的 MySQL 服务器(事实上,每次我尝试在它处于活动状态时打开它时,我的首选项窗格都会崩溃系统首选项)。我按照the MySQL 5.6 handbook 的说明进行操作,终于又自动启动了!创建文件/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>             <string>com.oracle.oss.mysql.mysqld</string>
    <key>ProcessType</key>       <string>Interactive</string>
    <key>Disabled</key>          <false/>
    <key>RunAtLoad</key>         <true/>
    <key>KeepAlive</key>         <true/>
    <key>SessionCreate</key>     <true/>
    <key>LaunchOnlyOnce</key>    <false/>
    <key>UserName</key>          <string>_mysql</string>
    <key>GroupName</key>         <string>_mysql</string>
    <key>ExitTimeOut</key>       <integer>600</integer>
    <key>Program</key>           <string>/usr/local/mysql/bin/mysqld</string>
    <key>ProgramArguments</key>
        <array>
            <string>/usr/local/mysql/bin/mysqld</string>
            <string>--user=_mysql</string>
            <string>--basedir=/usr/local/mysql</string>
            <string>--datadir=/usr/local/mysql/data</string>
            <string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
            <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
            <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
            <string>--port=3306</string>
        </array>
    <key>WorkingDirectory</key>  <string>/usr/local/mysql</string>
</dict>
</plist>

并在创建文件后运行以下命令:

cd /Library/LaunchDaemons
sudo chown root:wheel com.oracle.oss.mysql.mysqld.plist 
sudo chmod o-w com.oracle.oss.mysql.mysqld.plist 
sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist

【讨论】:

    【解决方案2】:

    我的 Mac 在 El Capitan 上运行。 MySQL 通过 brew 安装。

    mysql.server status 
    

    告诉我有一些问题要解决:

    ERROR! MySQL is not running, but PID file exists
    

    /usr/local/Cellar/mysql/x.x.x/目录下找到homebrew.mxcl.mysql.plist文件并复制到/Library/LaunchDaemons/

    sudo cp homebrew.mxcl.mysql.plist /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
    

    设置所有必要的权限:

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

    使用的部分建议,由Justin描述

    【讨论】:

      【解决方案3】:

      MacMiniVault 有一个bash script,它会为你做这件事 - 并安装 MySQL。还有一个article 描述了这个过程。

      文章中建议将脚本直接通过管道传输到终端并运行它,但由于这有一些严重的安全隐患,最好在本地运行之前下载并检查脚本。

      注意:为了回应 cmets 关于遵循上述文章中的说明的安全隐患,此回复已重新编写。 将 unknown 源中的 shell 脚本直接传送到 bash 通常是个坏主意。另外,如果您不理解脚本或不信任作者,请不要使用它。

      【讨论】:

      • 这就是修复它的方法 - 只要确保删除所有现有的mysql数据之前:community.jaspersoft.com/wiki/uninstall-mysql-mac-os-x
      • 将未知来源的 shell 脚本直接传送到 bash 绝对不是做任何事情的好方法。
      • @par:是的,将 unknown 源中的 shell 脚本直接传送到 bash 是个坏主意。但是,在这种情况下,shell 脚本是开源的,可以在 Github 上进行检查...
      • 您假设向您显示源代码的服务器与为您的计算机提供源代码的服务器相同。在 github 等大型站点上,这几乎肯定不是一个有效的假设(即可能涉及 CDN),所以 YES,您确实希望将 URL 视为未知来源。下载源代码,阅读它(更好的是,计算它的 SHA1 哈希),只有在你验证它之后才能安装它。
      • 考虑到安全问题,我已经修改了原始回复。
      【解决方案4】:

      如果你通过homebrew安装了mysql,你可以让launchd在登录时启动mysql:

      ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
      

      【讨论】:

      • 这对我在优胜美地或 El Capitan 上都不起作用。但是,@Justin 的回答奏效了。
      【解决方案5】:

      这是修复它的原因:

      首先,新建一个文件:/Library/LaunchDaemons/com.mysql.mysql.plist

      <?xml version="1.0" encoding="UTF-8"?>
      <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>
      

      然后更新权限并添加到launchctl:

      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
      

      【讨论】:

      • 有效!谢谢!您需要这个的原因是因为 StartupItems 已从 Yosemite 中删除。有a note at the start of the page in Apple's docs explaining this:Startup items are a deprecated technology. Launching of daemons through this process may be removed or eliminated in a future release of OS X.
      • 这也适用于我,但在我的系统上,mysql 用户实际上是_mysql。您可以运行 dscacheutil -q user | grep mysql 来查看用户在您的系统上应该是什么。
      • 启动项如何成为一项已弃用的技术?此功能的替代品是什么?
      • Apple 在折旧通知中说,“改用已推出的设施。”
      • 我必须更改为 --user=my_user_name 才能正常工作。
      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2014-11-15
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多