Вопрос Обновление 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


112
2018-04-22 17:53


происхождения


У меня такая же проблема Вот, - KernelPanic
Должен был удалить phpmyadmin, который каким-то образом вызывал проблемы с зависимостью. После переустановки все снова работает отлично. - Hinrich
do-release-upgrade от Ubuntu 14 до 16 выполняет неподдерживаемое обновление с MySQL 5.5 до 5.7, поэтому ожидается, что MySQL будет нарушен после, как сообщается здесь: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/... - Marco Marsala
@MarcoMarsala Я не знаю, можем ли мы сказать, что это ожидаемый для того, чтобы MySQL нарушался после обновления Ubuntu с 14 по 16, хотя, я полагаю, это зависит от вашей перспективы. Для обычного пользователя, конечно, не ожидается, что обновление LTS будет похоже на MySQL. Удивительно, но не было обнаружено во время тестирования. - TheGremlyn


ответы:


Инструкции @ 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 использование

    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,

Это заставило его работать!


112
2018-04-25 13:38



после всех этих операций (я делал это раньше) у меня все еще такие же ошибки ... - Sergii P
Вы должны удалить каждый my.cnf. * Из каталога / etc / mysql. Ищите my.cnf.backup, my.cnf.fallback и my.cnf.migrated - все эти файлы также необходимо удалить (сначала резервное копирование!) - hitzi
@SergiiP sudo find / -name "my.cnf" может пригодиться. - starbeamrainbowlabs
mysql-server-core-должен быть mysql-server-core-5.7. В противном случае работал как шарм. Спасибо! - Anonymous
+1. Ты сделал мой день! Также утром и вечером! Я застрял. - Max Yudin


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


54
2018-04-25 22:37



Я столкнулся с этой проблемой, и то же самое исправление сработало для меня. - Allen
Работал для меня. Каждое решение здесь, mysql, работало после этого. - Błażej Michalik
То же самое здесь - это должен быть главный пост. - a1phanumeric
Работал и для меня! Огромное спасибо. Чтобы быть явным, запустите: sudo systemctl enable mysql.service и после этого sudo apt install -f, - Fernando Paladini
Это все, что я должен был сделать. Я отключил автозапуск, как описано @naruto. Я включил автозапуск и запустил «sudo apt upgrade». Теперь исправлено. Должен быть верный ответ. Это гораздо более простое, более стандартное и менее проблемное решение. - Jack Holt


Инструкции здесь исправлены на моем сервере: 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
2018-04-22 22:05



Спасибо dpkg -l | grep mysql , Это помогло понять направление. - Max Yudin


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

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
2017-07-01 12:03



Я закончил чистку всего, а затем загрузил версию mysql-сервера сообщества и вручную установил здесь: dev.mysql.com/downloads/mysql - RyanNerd
Точно так же случилось со мной, и ваши шаги решили это. Bur для меня мой вызов mysql_upgrade был в строке 320. Можете ли вы объяснить, почему он возвращает ненулевое значение при вызове из postinst-скрипта? - emiliopedrollo
@ amiliopedrollo Нет, я не могу объяснить здесь. Но я думаю, что номер строки теперь 320, потому что недавно сторонники пакета увеличили сценарий postinstall, я наблюдал то же самое на днях, во время последнего запуска программы обновления (включая новый mysql-deb-пакет) , - knb
Благодаря! С set -e Я смог решить точную проблему - у MySQL не было доступа для пользователя системы ubuntu, указанного в /etc/mysql/debian.cnf  , Поэтому я добавил этого пользователя в MySQL и предоставил привилегии, запустил dpkg снова, и это сработало! - Allen Hamilton


В моем случае, с 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
2018-04-27 08:14



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


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

# 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
2018-04-29 12:30





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

Я попал в Страница загрузки 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 install mysql-server

1
2017-09-25 17:19



isntall-> install опечатка. Глупый СО не позволяет мне исправить один символ. - Csaba Toth
@CsabaToth исправлено, спасибо! - ostrokach


Я была такая же проблема. Я попытался повторно установить 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 работает для меня! Надеюсь, это поможет кому-то.


0
2017-08-20 20:02