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

102

Мое общее обновление прошло хорошо, но я остался с критически затяжной проблемой, когда 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 из-за зависимостей (?). Любые предложения о том, что я могу сделать, чтобы исправить это, были бы очень желанными.

EDIT: Похоже, я не единственный: Ссылка

    
задан TheGremlyn 22.04.2016 в 17:53
источник

8 ответов

102

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

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

  1. Создайте резервную копию my.cnf file в /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 use

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

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

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

    Затем служба должна иметь возможность начать с sudo service mysql start .

Это заработало!

    
ответ дан TheGremlyn 25.04.2016 в 13:38
источник
47

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

    
ответ дан Naruto Biju Mode 25.04.2016 в 22:37
17

Инструкции здесь исправлены на моем сервере: Ссылка

  

Я могу понять, как боль в вашей системе в непоследовательном состоянии   но не стоит беспокоиться о всей ситуации и делать шаг за шагом   чтобы система была чистой.

     

Сначала давайте посмотрим текущее состояние всех пакетов mysql на машине   используя: dpkg -l | grep mysql (Пожалуйста, вставьте вывод, исключая последний   столбец)      

Первый столбец обозначает текущий статус пакета. Вот   возможные варианты:

     

ii) Установлен rc) Удалены конфиг-файлы (это должно быть состояние   всех пакетов, которые вы удалили с помощью «apt-get remove», который делает   не удалять конфигурационные файлы в / etc)

     

Для этого вам нужно будет запустить «apt-get purge» до   вы не видите никаких пакетов в приведенном выше списке.

     

Помните, что некоторые пакеты, отличные от mysql-сервера, такие как   python-mysql.connector и python-mysqldb, если они установлены, не обязательно должны быть   удалены, поскольку они не влияют на эту ситуацию, но если   удаленный может вызвать проблемы с приложениями, использующими их.

     

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

    
ответ дан Andrew Beeman 22.04.2016 в 22:05
16

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

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 может появиться снова.

    
ответ дан knb 01.07.2016 в 12:03
3

В моем случае с 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 снова работает:)

    
ответ дан Leonardo Catalinas 27.04.2016 в 08:14
3

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

# 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

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

    
ответ дан ChristophS 29.04.2016 в 12:30
0

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

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

Подробнее:

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

  

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

    
ответ дан milkovsky 20.08.2016 в 20:02
0

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

Я перешел на страницу страницы загрузки 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
    
ответ дан ostrokach 25.09.2017 в 17:19