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
9 ответов
Отправленные инструкции @andrew-beerman находятся на правильном пути, хотя они мне не совсем понятны и, похоже, рекомендуют больше, чем необходимо. Я собрал ответ из вышеперечисленного и полезный пост в ветке ошибок.
Вот шаги, которые я предпринял, чтобы исправить это:
Сделайте резервную копию вашего
my.cnf file
в/etc/mysql
и удали или переименуй егоsudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
Удалить папку
/etc/mysql/mysql.conf.d/
с помощьюsudo rm -r /etc/mysql/mysql.conf.d/
Убедитесь, что у вас нет
my.cnf
файл спрятан где-то еще (я сделал в моем домашнем каталоге!) или в/etc/alternatives/my.cnf
использованиеsudo find / -name my.cnf
Резервное копирование и удаление
/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
В случае, если ваш системный журнал показывает ошибку, такую как "mysqld: Не удается прочитать каталог /etc/mysql/conf.d/", создайте символическую ссылку:
sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
Тогда служба должна быть в состоянии начать с
sudo service mysql start
,
Вот и все заработало!
Сегодня я получил ту же проблему, после попытки многих решений я обнаружил, что проблема была команда sudo systemctl disable mysql.service
что я использовал, чтобы отключить автозапуск MySQL, поэтому, чтобы он заработал, я снова включил сервер MySQL с помощью команды sudo systemctl enable mysql.service
и снова запустите процесс обновления, и он завершится идеально.
Ваше сообщение об ошибке содержит эту строку:
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
манипулирование сценарием. Затем создайте его заново после запуска обновления пакета.
После следующего незначительного обновления версии пакета mysqld debian эта проблема с /var/lib/dpkg/info/mysql-server-5.7.postinst
Сценарий может появиться снова.
Здесь инструкции исправили это на моем сервере: 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, если они установлены, их не нужно удалять, поскольку они не влияют на эту ситуацию, но их удаление может вызвать проблемы для приложений, использующих их.
Мы обязательно попытаемся повторно посетить наши документы, чтобы узнать, как мы можем защитить пользователей от этой проблемы. Спасибо, что поделились своим мнением с нами.
В моем случае с помощью 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 снова работает:)
В моем случае я мог бы решить проблему, добавив
# 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.
Я была такая же проблема. Я пытался переустановить 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 работает на меня! Надеюсь, это кому-нибудь поможет.
Для версии WSl Ubuntu 16.04 я нашел эту полезную статью здесь
Действия, которые необходимо предпринять для решения
sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst
- Ищите эту строку
mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?
- Добавь это
service mysql restart
непосредственно над строкой в цифре 2. - Сохраните и запустите это
sudo dpkg --configure -a
это должно выглядеть как
service mysql restart
mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?
Надеюсь на эту помощь
У меня возникла проблема на нескольких серверах. Исправление состояло в том, чтобы запустить apt install phpmyadmin --reinstall
что решило вышеупомянутое (без необходимости трогать mysql впоследствии)