Обновление 16.04 сломало mysql-сервер

Я предлагаю вам попробовать настроить входное устройство Midi на «24: USB2.0-MIDI» и выходное устройство на «129: MuseScore». Я не являюсь частым пользователем Ubuntu, поэтому мне никогда не приходилось сталкиваться с такой проблемой, но это должно нормально работать!

1
задан 22 April 2016 в 21:23

7 ответов

Сегодня у меня такая же проблема, после попытки многих решений я обнаружил, что проблема заключалась в команде sudo systemctl disable mysql.service, которую я использовал для отключения автоматического запуска MySQL, поэтому, чтобы заставить его работать, я снова включил сервер MySQL с помощью команды [ f2] и снова запустить процесс обновления, и он отлично прекратился.

51
ответ дан 23 May 2018 в 11:56
  • 1
    Я столкнулся с этой проблемой, и то же самое исправление сработало для меня. – Allen 26 April 2016 в 18:13
  • 2
    Работал для меня. Каждое решение здесь, mysql, работало после этого. – Błażej Michalik 29 April 2016 в 17:51
  • 3
    То же самое здесь - это должен быть главный пост. – a1phanumeric 15 September 2016 в 17:32
  • 4
    Работал и для меня! Огромное спасибо. Чтобы быть явным, запустите: sudo systemctl enable mysql.service и после этого запустите sudo apt install -f. – Fernando Paladini 25 January 2017 в 04:03
  • 5
    Это все, что я должен был сделать. Я отключил автозапуск, как описано @naruto. Я включил автозапуск и выполнил «sudo apt upgrade». Теперь исправлено. Должен быть верный ответ. Это гораздо более простое, более стандартное и менее проблемное решение. – Jack Holt 7 August 2017 в 19:00

Инструкции здесь исправлены на моем сервере: https://bugs.mysql.com/bug.php?id=72722

Я могу понять, как боль в вашей системе в несовместимом состоянии, но позволяет не беспокойтесь о всей ситуации и сделайте шаг за шагом, чтобы система была чистой. Сначала давайте посмотрим текущее состояние всех пакетов mysql на машине, используя: dpkg -l | grep mysql (Пожалуйста, вставьте вывод, исключая последний столбец). Первый столбец обозначает текущий статус пакета. Вот возможные варианты: ii) Установленный rc) Удаленные конфиг-файлы сохранены (это должно быть состояние всех удаленных пакетов с помощью apt-get remove, которые не удаляют конфигурационные файлы в / etc). Для этого вам нужно будет запустить apt-get purge, пока вы не увидите никаких пакетов в приведенном выше списке. Помните, что некоторые не-mysql-серверные пакеты, такие как python-mysql.connector и python-mysqldb, если они установлены, не нужно удалять, так как они не влияют на эту ситуацию, но если их удалить, это может вызвать проблемы с приложениями, использующими их. Мы обязательно попытаемся повторно посетить наши документы, чтобы узнать, как мы можем защитить пользователей от этой проблемы. Благодарим вас за то, что поделились своими отзывами с нами.
17
ответ дан 23 May 2018 в 11:56
  • 1
    Спасибо за dpkg -l | grep mysql . Это помогло понять направление. – Max Yudin 7 June 2016 в 20:47

Ваше сообщение об ошибке содержит эту строку:

subprocess installed post-installation script returned error exit status 1

Однако это installed post-installation script не упоминается по имени. После долгих переделок я узнал, что его имя (в моем случае) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Откройте этот файл с помощью sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst или вашего предпочтительного редактора.

Наверху измените строку 3 (или так): set -e на set -x, сохраните файл , (опция -e - это «выход из ошибок», -x означает «явно показать выполненную команду», предположительно)

Запустить sudo dpkg --configure -a --log /tmp/dpkg.log (опция -log необязательна). Вы также можете просто запустить apt upgrade, если вы знаете, что это будет единственный пакет, который будет обновлен.

Теперь вы получаете подробный вывод сценария mysql-server-5.7.postinst bash, и вы можете понять, что не так .

В моем случае он безуспешно пытался (повторно) запустить mysql_upgrade, но это не было необходимо для моей настроенной установки mysql. Я был уверен, что запустил его вручную до, успешно, и все было хорошо.

Итак, я выписал строку 321 (для более старых выпусков mysqld попробуйте строку 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

и команда, которая потерпела неудачу раньше, sudo apt upgrade (запустите ее снова), завершилась успешно, а dpkg удалил статус ошибки для этого пакета.

Теперь вы можете установить назад set -x - set -e (упомянутый выше). И необязательно раскомментируйте строку mysql-upgrade.

Дополнительная работа может потребоваться, если вы переместили свой раздел данных mysql в нестандартное место. Я переместил мой из /var/lib/mysql/data на другой диск через символическую ссылку. Тогда вам может понадобиться временно удалить символическую ссылку перед манипуляцией сценария postinst. Затем повторно заново создайте его после запуска обновления пакета.

После следующего небольшого обновления версии пакета debian mysqld эта проблема с скриптом /var/lib/dpkg/info/mysql-server-5.7.postinst может появиться снова.

17
ответ дан 23 May 2018 в 11:56
  • 1
    Я закончил чистку всего, а затем загрузил версию mysql-сервера сообщества и вручную установил здесь: dev.mysql.com/downloads/mysql – RyanNerd 1 September 2016 в 22:34
  • 2
    Точно так же случилось со мной, и ваши шаги решили это. Bur для меня мой вызов mysql_upgrade был в строке 320. Можете ли вы объяснить, почему он возвращает ненулевое значение при вызове из postinst-скрипта? – emiliopedrollo 24 September 2016 в 21:28
  • 3
    @ amiliopedrollo Нет, я не могу объяснить здесь. Но я думаю, что номер строки теперь 320, потому что недавно сторонники пакета увеличили сценарий postinstall, я наблюдал то же самое на днях, во время последнего запуска программы обновления (включая новый mysql-deb-пакет) , – knb 24 September 2016 в 22:25
  • 4
    Благодаря! С помощью set -e я смог решить точную проблему - у MySQL не было доступа для пользователя системы ubuntu, указанного в /etc/mysql/debian.cnf . Поэтому я добавил этого пользователя в MySQL и предоставил привилегии, снова запустил dpkg, и он сработал! – Allen Hamilton 24 April 2017 в 08:17

В моем случае с strace я увидел, что / var / run / mysqld / не существует, и mysqld не может создать файл mysqld.sock.

Эти команды решили мою проблему: [ ! d1]

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Теперь:

systemctl start mysql

И mysql снова работает:)

3
ответ дан 23 May 2018 в 11:56
  • 1
    Я предлагаю вам добавить эти строки в / usr / share / mysql / mysql-systemd-start, начиная с строки 25, после этого вам не придется воссоздавать этот каталог после каждой перезагрузки (извините, что строка не работает в этом комментарии) : если [ ! -d / run / msyqld]; то mkdir -p -m0755 / run / mysqld || {echo " Невозможно создать / запустить / mysqld & quot ;; выход 1; } chown mysql: mysql / run / mysqld || {echo " Невозможно выполнить chown / run / mysqld & quot ;; выход 1; } fi – scoobydoo 30 June 2016 в 17:44

В моем случае я мог бы решить проблему, добавив

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

в /etc/apparmor.d/local/usr.sbin.mysqld

. Для более подробной информации взгляните на мой ответ (ChristophER) в stackoverflow.

3
ответ дан 23 May 2018 в 11:56

У меня была такая же проблема. Я пытался переустановить mysql несколько раз, но не имел успеха.

Я понял, что проблема для меня в том, что еще один процесс mysql уже запущен.

Подробнее:

После того, как я внимательно прочитал журналы в /var/log/mysql/error.log и нашел:

[ERROR] Не удается запустить сервер: привязать к порту TCP / IP: адрес уже используется [ERROR] У вас уже есть другой сервер mysqld, работающий на порту: 3306?

Похоже, что другое приложение уже использовало порт.

Я проверил его с помощью ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

И я убил запущенный процесс sudo kill -15 14706

Затем я начал mysql: /etc/init.d/mysql start

Наконец, mysql работает для меня! Надеюсь, это поможет кому-то.

0
ответ дан 23 May 2018 в 11:56

Ни один из ответов на этой странице не работал для меня.

Я перешел на страницу загрузки Oracle, загрузив mysql-apt-config_0.8.8-1_all.deb и установив MySQL из Oracle repo:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt isntall mysql-server
0
ответ дан 23 May 2018 в 11:56

Другие вопросы по тегам:

Похожие вопросы: