Як автоматично завантажити 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.