Autostart MySQL Server w systemie Mac OS X Yosemite / El Capitan

84

Chciałbym automatycznie uruchamiać serwer MySQL przy starcie. Było to możliwe w Mavericks, ale wydaje się, że nie działa w Yosemite.

edycja : wydaje się, że to działa również z El Capitan

wprowadź opis obrazu tutaj

Xaver
źródło

Odpowiedzi:

143

@dcc był bardzo blisko. Oto jak MySQL ponownie uruchamia się automatycznie w Yosemite:

com.mysql.mysql.plistW /Library/LaunchDaemons:

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

Dodatkowo zmieniłem uprawnienia w oparciu o tę odpowiedź

sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist

Wreszcie uruchamiam to polecenie

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

Jeśli masz jakiś dodatek, udostępnij go poniżej!

Xaver
źródło
1
Powinieneś zaznaczyć odpowiedź Q, aby inne osoby mogły znaleźć twoje rozwiązanie.
davidcondrey
26
Marzę o dniu, w którym nadejdzie OSX 10.11 i nie będę musiał spędzać 2 godzin na naprawianiu apache, php i mysql. Może czas przenieść się do Vagrant ..
dvk3
10
tylko dwie godziny! haha
Xaver
8
To naprawdę działa. Przy okazji, pierwsze dwa polecenia można połączyć w jedno:sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
Rockallite
1
Bardzo przydatne jest to, aby skrócić moje dwie godziny, aby znów działały! Dzięki chłopaki.
Nigel B. Peck
13

Postępowałem zgodnie ze wskazówkami @Xavers i próbując wykonać polecenie

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

otrzymał błąd:

/Library/LaunchDaemons/com.mysql.mysql.plist: Nieprawidłowa lista właściwości

Po chwili drapania się po głowie stwierdziłem, że usunięcie deklaracji DOCTYPE DTD u góry spowodowało, że błąd zniknął i po ponownym uruchomieniu serwer mySQL rzeczywiście działa.

Tak więc mój XML wygląda następująco:

<?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>
Jewgienij Simkin
źródło
9

Jeśli zainstalowałeś mysql z homebrew , możesz uzyskać instrukcje, jak go automatycznie uruchomić, wpisując brew info mysql.

Na przykład wynik na moim komputerze to:

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
Kyle Chadha
źródło
2

Utwórz /Library/LaunchDaemons/com.mysql.mysql.plisti zapisz go za pomocą następującego pliku 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>

Następnie załaduj nowo utworzony plik plist

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
davidcondrey
źródło
nie działa, po ponownym uruchomieniu nadal wyświetla komunikat „zatrzymano” :(
Xaver,
apachectl starturuchamia serwer !? czy są spokrewnieni?
Xaver,
sudo launchctl load -w...Zgłasza błądInvalid property list
Xaver
nie mam żadnych możliwości, przepraszam
davidcondrey
1
ok, mimo wszystko dziękuję, opublikuję rozwiązanie, jeśli uda mi się je zdobyć
Xaver
2

Ten artykuł pomoże mi rozwiązać problem z nieprawidłowym błędem. Poprawiona lista, której użyłem poniżej.

Jak sprawdzić, która linia pliku plist jest nieprawidłowa

<?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>
Sharvin
źródło
1

Żadna z pozostałych odpowiedzi nie pomogła w automatycznym uruchomieniu mojego serwera MySQL. Postępowałem zgodnie z instrukcjami zawartymi w podręczniku MySQL 5.6 i w końcu ponownie uruchamia się automatycznie! Utwórz plik /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plistz następującą zawartością:

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

I uruchom następujące polecenia po utworzeniu pliku:

cd /Library/LaunchDaemons
sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
NobleUplift
źródło
0

Kiedy użyłem plist sugerowanego we wcześniejszych odpowiedziach, zmieniłem użytkownika na _mysql dla mojego systemu, ale przycisk „Zatrzymaj serwer MySQL” w panelu preferencji MySQL już nie działał. KeepAliveKlawisz spowoduje, że proces ponownie uruchomić natychmiast po naciśnięciu przycisku STOP. Użyłem klawisza, RunAtLoadaby uruchomić go po ponownym uruchomieniu, ale pozwoliłem, aby przycisk w okienku kontynuował pracę.

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

Następnie, podobnie jak w innych odpowiedziach, uruchomiono:

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

Teraz MySQL uruchamia się po ponownym uruchomieniu, ale panel MySQL w Preferencjach systemowych nadal działa. Prowadzę El Capitan, 10.11.2

Franklin F.
źródło