So laden Sie MySQL beim Start unter OS X Yosemite / El Capitan automatisch


77

Nach dem Upgrade von OS X wurde meine Installation von MySQL beim Start nicht mehr geladen.

Diese Anleitung zu MySQL lautet:

"Die Installation des Startelements fügt der Systemkonfigurationsdatei / etc / hostconfig eine Variable MYSQLCOM = -YES- hinzu. Wenn Sie den automatischen Start von MySQL deaktivieren möchten, ändern Sie diese Variable in MYSQLCOM = -NO-."

Also habe ich diese Datei geöffnet und sie lautet:

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

Ich # This file is going awaygehe davon aus, dass OSX-Entwickler das hinzugefügt haben , bin mir aber nicht sicher.

Wenn dies der Fall ist, wie kann MySQL beim Start unter OSX Yosemite ordnungsgemäß gestartet werden?


Können Sie MySql trotzdem manuell starten?
Parker

Ich denke, diese Frage könnte besser für Ask Different
Barranka

3
Dies ist per se keine Programmierfrage, aber da Macs hauptsächlich als PCs verwendet werden, liegt es nahe, dass die überwiegende Mehrheit der Leute, die versuchen, MySQL auf einem Mac zu starten, Entwickler sind. Daher ist diese Frage wahrscheinlich für viele Benutzer von SO relevant.
Par

Dies wurde gestern hier beantwortet: MySQL startet nicht in OSX Yosemite 10.10
davidcondrey

1
@dcc Mit dieser Frage / Antwort wird MySQL nach dem Neustart gestartet (da das GUI-Tool dies nicht tut). Meine Frage ist, wie MySQL beim Start von OSX geladen werden kann.
Justin

Antworten:


170

Dies ist, was es behoben hat:

Erstellen Sie zunächst eine neue Datei: /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>

Aktualisieren Sie dann die Berechtigungen und fügen Sie sie hinzu zu 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

10
Funktioniert! Vielen Dank! Der Grund, warum Sie dies benötigen, ist, dass dort StartupItems aus Yosemite entfernt wurden. Es gibt einen Hinweis am Anfang der Seite in Apples Dokumenten, der dies erklärt :Startup items are a deprecated technology. Launching of daemons through this process may be removed or eliminated in a future release of OS X.
GuySoft

14
Dies funktionierte auch für mich, aber auf meinem System war der MySQL-Benutzer tatsächlich _mysql. Sie können ausführen, um dscacheutil -q user | grep mysqlzu sehen, was der Benutzer auf Ihrem System sein soll.
m14t

2
Wie sind Startelemente eine veraltete Technologie? Was ist der Ersatz für diese Funktion?
Aaron Hill

1
Apple sagt in der Abschreibungsmitteilung: "Verwenden Sie stattdessen die Startfunktion."
Justin

1
Ich musste mich ändern --user=my_user_name, damit es funktioniert.
Adam Faryna

16

Wenn Sie MySQL über Homebrew installiert haben, können Sie launchdMySQL beim Login starten, indem Sie:

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

Dies hat bei mir weder bei Yosemite noch bei El Capitan funktioniert. Die Antwort von @ Justin hat jedoch funktioniert.
Davemyron

2

Die akzeptierte Antwort funktionierte nicht, um meinen MySQL-Server automatisch zu starten (und tatsächlich stürzte mein Einstellungsbereich jedes Mal ab, wenn ich versuchte, ihn zu öffnen, während er aktiv war). Ich habe die Anweisungen aus dem MySQL 5.6-Handbuch befolgt und es startet endlich wieder automatisch! Erstellen Sie die Datei /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plistmit folgendem Inhalt:

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

Führen Sie nach dem Erstellen der Datei die folgenden Befehle aus:

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

1

Mein Mac läuft auf El Capitan. MySQL über Brew installiert.

mysql.server status 

sagte mir, dass ich einige Probleme zu lösen hatte:

ERROR! MySQL is not running, but PID file exists

Gefunden homebrew.mxcl.mysql.plistDatei in /usr/local/Cellar/mysql/x.x.x/Verzeichnis und kopiert es/Library/LaunchDaemons/

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

Legen Sie alle erforderlichen Berechtigungen fest:

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

Verwendeter Teil von Ratschlägen, beschrieben von Justin


0

Es gibt ein Bash-Skript von MacMiniVault , das dies für Sie erledigt - und auch MySQL installiert. Es gibt auch einen Artikel der den Prozess beschreibt.

In diesem Artikel wird empfohlen, das Skript direkt in das Terminal zu leiten und auszuführen. Da dies jedoch schwerwiegende Auswirkungen auf die Sicherheit hat, ist es besser, das Skript herunterzuladen und zu überprüfen, bevor es lokal ausgeführt wird.

Hinweis: Diese Antwort wurde als Reaktion auf Kommentare zu den Sicherheitsauswirkungen der Befolgung der Anweisungen im oben genannten Artikel überarbeitet. Es ist im Allgemeinen eine schlechte Idee, ein Shell-Skript von einer unbekannten Quelle direkt an bash weiterzuleiten. Wenn Sie das Skript nicht verstehen oder dem Autor nicht vertrauen, verwenden Sie es nicht.


1
Das ist der Weg, um das
Problem

3
Das Weiterleiten eines Shell-Skripts von einer unbekannten Quelle direkt an Bash ist definitiv keine gute Möglichkeit, etwas zu tun.
Par

@par: Ja, es ist eine schlechte Idee , ein Shell-Skript von einer unbekannten Quelle direkt an bash zu leiten . In diesem Fall ist das Shell-Skript jedoch Open Source und kann bei Github
Per Quested Aronsson

Sie gehen davon aus, dass der Server, auf dem der Quellcode angezeigt wird, derselbe ist, der ihn auf Ihrem Computer bereitstellt. Auf einer großen Site wie Github ist dies mit ziemlicher Sicherheit keine gültige Annahme (dh es handelt sich wahrscheinlich um ein CDN). JA , Sie möchten die URL als unbekannte Quelle behandeln. Laden Sie die Quelle herunter, lesen Sie sie (noch besser, berechnen Sie den SHA1-Hash) und installieren Sie sie erst, nachdem Sie sie überprüft haben.
Par

1
Ich habe die ursprüngliche Antwort unter Berücksichtigung der Sicherheitsbedenken geändert.
Per Quested Aronsson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.