Як автоматично завантажити MySQL під час запуску на OS X Yosemite / El Capitan


77

Після оновлення OS X моя інсталяція MySQL припинила завантаження під час запуску.

Цей посібник на 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але я не впевнений.

Якщо це так, то як правильно запустити MySQL під час запуску на OSX Yosemite?


Чи можете ви ще вручну запустити MySql?
Паркер,

Я думаю, що це питання може бути більше підходящим для Ask Different
Barranka,

3
Це не питання програмування як таке, але оскільки Mac в основному використовується як персональний комп’ютер, це означає, що переважна більшість людей, які намагаються запустити MySQL на Mac, є розробниками. Тож це питання, мабуть, актуальне для багатьох користувачів SO.
пар.

На це відповіли тут вчора: MySQL не запускається в OSX Yosemite 10.10
davidcondrey

1
@dcc Це питання / відповідь - це як запустити MySQL після перезапуску (оскільки інструмент графічного інтерфейсу цього не робить). Моє питання полягає в тому, як змусити MySQL завантажуватися при запуску OSX.
Джастін

Відповіді:


170

Це виправлено:

Спочатку створіть новий файл: /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

10
Працює! Дякую! Причина, по якій вам це потрібно, полягає в тому, що елементи StartupItems були видалені з Йосеміті. На початку сторінки в документації Apple є примітка, яка пояснює це :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
Це спрацювало і для мене, але в моїй системі користувач mysql насправді був _mysql. Ви можете запустити, dscacheutil -q user | grep mysqlщоб побачити, яким повинен бути користувач у вашій системі.
m14t

2
Як елементи запуску є застарілою технологією? Що замінює цю функцію?
Аарон Хілл

1
У повідомленні про амортизацію Apple повідомляє, що "замість цього використовуйте запуск".
Джастін

1
Мені довелося перейти на, --user=my_user_nameщоб змусити це працювати.
Адам Фарина

16

Якщо ви встановили mysql через homebrew , ви можете launchdзапустити mysql при вході за допомогою:

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

Це не спрацювало для мене ні в Йосеміті, ні в Ель-Капітані. Однак відповідь @ Justin спрацювала.
davemyron

2

Прийнята відповідь не спрацювала для автоматичного запуску мого сервера MySQL (і насправді моя панель налаштувань аварійно завершувала роботу кожного разу, коли я намагався відкрити її, коли вона була активною). Я дотримувався вказівок з посібника MySQL 5.6, і нарешті він автоматично запускається знову! Створіть файл /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

1

Мій Mac працює на El Capitan. MySQL встановлюється за допомогою brew.

mysql.server status 

сказав мені, що мені доведеться вирішити деякі проблеми:

ERROR! MySQL is not running, but PID file exists

Знайшов homebrew.mxcl.mysql.plistфайл у /usr/local/Cellar/mysql/x.x.x/каталозі та скопіював у/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

Використана частина порад, описаних Джастіном


0

Існує скрипт bash від MacMiniVault , який зробить це за вас - і також встановить MySQL. Є також стаття, яка описує процес.

У статті пропонується скерувати сценарій прямо в термінал і запустити його, але оскільки це має серйозні наслідки для безпеки, краще завантажити та перевірити сценарій, перш ніж запускати його локально.

Примітка: Ця відповідь була перероблена у відповідь на коментарі щодо наслідків для безпеки дотримання інструкцій у вищезазначеній статті. Як правило, погана ідея передавати скрипт оболонки з невідомого джерела безпосередньо в bash. Крім того, якщо ви не розумієте сценарій або не довіряєте автору, не використовуйте його.


1
Це спосіб виправити - просто обов’язково видаліть усі наявні дані mysql до: community.jaspersoft.com/wiki/uninstall-mysql-mac-os-x
maaalex

3
Передача сценарію оболонки з невідомого джерела безпосередньо в bash, безумовно, не є хорошим способом щось зробити.
пар.

@par: Так, переводити скрипт оболонки з невідомого джерела безпосередньо в bash - погана ідея. Однак у цьому випадку сценарій оболонки є відкритим і доступний для перевірки в Github ...
Per Quested Aronsson

Ви припускаєте, що сервер, який показує вам вихідний код, той самий, що подає його на ваш комп’ютер. На великому сайті, такому як github, це майже напевно не є допустимим припущенням (тобто, можливо, задіяний CDN), тому ТАК , ви хочете розглядати URL-адресу як невідоме джерело. Завантажте джерело, прочитайте його (ще краще, розрахуйте його хеш SHA1) і лише після перевірки встановіть його.
пар.

1
Я змінив оригінальну відповідь, враховуючи питання безпеки.
Per Quested Aronsson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.