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

Мое общее обновление прошло хорошо, но у меня осталась критическая проблема, связанная с тем, что mysql-сервер не смог установить себя, и ничто из того, что я пробовал, не заставило его работать.

Это ошибка, которую я вижу при попытке установить / переустановить ее:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я попытался полностью удалить ее, хотя при этом пытается установить MariaDB из-за зависимостей (?). Любые предложения о том, что я могу сделать, чтобы это исправить, были бы очень кстати.

РЕДАКТИРОВАТЬ: похоже, я не единственный: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

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

10 ответов

Инструкции, опубликованные @ andrew-beerman, находятся на правильном пути, хотя они не совсем понятны мне и, кажется, рекомендуют больше, чем необходимо. Я собрал воедино ответ из вышеупомянутого и полезный пост в ветке сообщения об ошибке.

Вот шаги, которые я предпринял, чтобы исправить это:

  1. Создайте резервную копию вашего файла my.cnf в / etc / mysql и удалите или переименуйте его

     sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
     
  2. Удалите папку /etc/mysql/mysql.conf.d/ , используя

     sudo rm -r /etc/mysql/mysql.conf.d/
     
  3. Убедитесь, что у вас нет файла my.cnf , спрятанного где-то еще (я сделал в моем домашнем каталоге!) Или в /etc/alternatives/my.cnf , используйте

     sudo find / -name my.cnf
     
  4. Резервное копирование и удаление файлов /etc/mysql/debian.cnf (не уверен, если необходимо, но на всякий случай)

     sudo mv /etc/mysql/debian.cnf / etc / mysql /  debian.cnf.bak
    sudo apt очистить mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt установить mysql-server
     
  5. Если ваш системный журнал показывает ошибку типа «mysqld: Can't read dir of '/etc/mysql/conf.d/'», создайте символическую ссылку:

     sudo ln -s / etc / mysql / mysql  .conf.d /etc/mysql/conf.d
     

    Тогда служба должна иметь возможность запускаться с sudo service mysql start .

Вот и все заработало!

129
ответ дан 23 April 2016 в 07:23

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

62
ответ дан 23 April 2016 в 07:23
  • 1
    Даже с шифрованием, поставщик мог создать снимки текущее состояние памяти и диска и клонировать новый экземпляр для получения такого же доступа, который Вы сделали. – muru 11 September 2017 в 22:40

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

subprocess installed post-installation script returned error exit status 1

Однако, этот установленный скрипт после установки не упоминается по имени. После долгих манипуляций я обнаружил, что его имя (в моем случае) /var/lib/dpkg/info/mysql-server-5.7.postinst.

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

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

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

Теперь вы получите подробный вывод 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 удалила статус ошибки для этого пакета.

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

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

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

21
ответ дан 23 April 2016 в 07:23
  • 1
    Привет @muru, я думал об этом, но в то время как данные шифруются они can' t получают доступ к ним, они могли сделать это, в то время как пользователь зарегистрирован, и данные не шифруются, действительно ли я прав? В этом случае, возможно, я должен переписать ответ способом как к sshfs зашифрованная папка и затем дешифровать его локально? – pa4080 11 September 2017 в 22:52

Инструкции, приведенные здесь, исправили его на моем сервере: 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, если они установлены, не обязательно удалены, поскольку они не влияют на эту ситуацию, но если удалены, может вызвать проблемы для приложений, использующих их.

Мы обязательно постараемся повторно посетить нашу документацию, чтобы узнать, как мы можем уберечь пользователей от подобных проблем. Спасибо, что поделился ваши отзывы подробно описаны у нас.

18
ответ дан 23 April 2016 в 07:23
  • 1
    У меня есть двойная загрузка, но материал низкого уровня обычно легче сделать на Linux, that' s, почему я спросил здесь. Вы знаете об инструментах Apple, или я должен пойти и спросить AskDifferent? – Narusan 11 September 2017 в 05:40

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

# 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

Подробнее см. мой ответ (ChristophS) на stackoverflow.

3
ответ дан 23 April 2016 в 07:23

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

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

Подробно:

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

[ОШИБКА] Невозможно запустить сервер: привязка к порту TCP / IP: адрес уже указан используйте

[ОШИБКА] У вас уже есть другой сервер 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 работает для мне! Надеюсь, это кому-то поможет.

1
ответ дан 23 April 2016 в 07:23
  • 1
    Yikes. o. O я предполагаю, что должен рассмотреть добавление HFS + модуль к RecuperaBit. – Andrea Lazzarotto 12 September 2017 в 22:03

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

Эти команды решили мою проблему. проблема:

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

Теперь:

systemctl start mysql

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

3
ответ дан 23 April 2016 в 07:23
  • 1
    @Narusan: I' m не знающий о любых таких инструментах, хотя I' m бесспорный они существуют. (У меня никогда не было Mac, но знайте достаточно о HFS + основные принципы, что было бы сумасшедшим, если бы не было таких инструментов.) Вопросы о программном обеспечении для Mac OS вне темы здесь по очевидным причинам, но можно спросить об этом на , Спрашивают Отличающийся . – David Foerster 11 September 2017 в 05:46

Ни один из ответов на этой странице не помог мне.

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

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
0
ответ дан 23 April 2016 в 07:23

У меня возникла проблема на нескольких серверах. Исправление заключалось в запуске apt install phpmyadmin --reinstall

, который разрешил описанное выше (без необходимости впоследствии прикасаться к mysql)

0
ответ дан 29 September 2019 в 18:05

Для версии WSl Ubuntu 16.04 я нашел эту полезную статью здесь

Действия, которые необходимо выполнить для решения

  1. sudo vi / var / lib / dpkg / info / mysql-server-5.7.postinst
  2. Найдите эту строку mysql_upgrade --defaults-file = / etc / mysql / debian.cnf || result = $?
  3. Добавьте эту службу mysql restart непосредственно над строкой под номером 2.
  4. Сохраните и запустите это sudo dpkg --configure -a

, оно должно выглядеть так

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

Надеюсь на эту помощь

1
ответ дан 5 January 2021 в 22:41

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

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