【问题标题】:Autostart MySQL Server on Mac OS X Yosemite/El Capitan在 Mac OS X Yosemite/El Capitan 上自动启动 MySQL 服务器
【发布时间】:2014-12-15 04:06:30
【问题描述】:

我想在启动时自动启动 MySQL 服务器。这在小牛队是可能的,但似乎不适用于优胜美地。

edit:似乎这也适用于 El Capitan

【问题讨论】:

    标签: mysql osx-yosemite osx-elcapitan


    【解决方案1】:

    创建/Library/LaunchDaemons/com.mysql.mysql.plist 并使用以下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>
            </true>
        </dict>
    </plist>
    

    然后加载新创建的plist文件

    sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
    

    【讨论】:

    • 不起作用,重新启动后仍然显示“已停止”:(
    • apachectl start启动服务器!?他们有关系吗?
    • sudo launchctl load -w... 抛出错误Invalid property list
    • 我没办法了,抱歉
    • 好的,谢谢你,如果我能得到解决方案,我会发布解决方案
    【解决方案2】:

    @dcc 非常接近。这就是 MySQL 在 Yosemite 上再次自动启动的方式:

    /Library/LaunchDaemons 中的com.mysql.mysql.plist

    <?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>
    

    另外我根据this answer更改了权限

    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
    

    如果你有任何补充,请在下面分享!

    【讨论】:

    • 您应该将您的 Q 标记为已回答,以便其他人找到您的解决方案。
    • 我梦想着 OSX 10.11 到来的那一天,我不必花 2 个小时来修复 apache、php 和 mysql。也许是时候搬到 Vagrant 了..
    • 确实有效。顺便说一句,前两个命令可以合并为一个:sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
    • 非常有用,因为它可以减少我让这些再次工作的两个小时!谢谢大家。
    • 为我工作 - 谢谢。顺便说一句,如果您正在阅读本文,您可能还会发现您的 Apache 副本在启动时也不起作用。如果您的 Apache 来自 Macports,则解决方法类似:sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist。我发现.plist文件在目录中仍然完好无损。
    【解决方案3】:

    这篇文章帮助我解决无效错误的问题。更正了我在下面使用的 plist。

    How to know which line of plist file is incorrect

    <?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>
    

    【讨论】:

      【解决方案4】:

      我关注@Xavers directions 并尝试执行命令

      sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
      

      得到错误:

      /Library/LaunchDaemons/com.mysql.mysql.plist:无效的属性列表

      挠了挠头一分钟后,我发现删除顶部的 DOCTYPE DTD 声明会使错误消失,并且在重新启动后,mySQL 服务器确实正在运行。

      所以,我的 XML 看起来像这样:

      <?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>
      

      【讨论】:

        【解决方案5】:

        当我使用先前答案中建议的 plist 时,我将系统的用户更改为 _mysql,但 MySQL 首选项窗格中的“停止 MySQL 服务器”按钮不再起作用。 KeepAlive 键将导致进程在按下停止按钮后立即再次启动。我使用密钥 RunAtLoad 让它在重新启动时启动,但允许窗格中的按钮继续工作。

        <?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>RunAtLoad</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>
        

        然后,与其他答案一样,运行:

        sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
        

        现在,MySQL 在重新启动时启动,但系统偏好设置中的 MySQL 窗格仍然有效。 我正在运行 El Capitan,10.11.2

        【讨论】:

          【解决方案6】:

          如果您使用自制软件安装了 mysql,您可以通过输入 brew info mysql 来获取有关如何自动启动它的说明。

          比如我机器上的输出是:

          To have launchd start mysql at login:
            ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
          Then to load mysql now:
            launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
          

          【讨论】:

            【解决方案7】:

            其他提供的答案都无法自动启动我的 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 launchctl load -F com.oracle.oss.mysql.mysqld.plist
            

            【讨论】:

              猜你喜欢
              • 2014-12-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-12-15
              • 2014-12-16
              • 1970-01-01
              • 1970-01-01
              • 2016-01-27
              相关资源
              最近更新 更多