Не могу переустановить mysql-сервер после его очистки

29

Я недавно сделал новую установку Ubuntu 16.04. Я также установил mysql-serverи mysql-client(их версия по умолчанию 5.7.12) через apt-get install.

Поскольку 5.7.12 показывал некоторые проблемы, я решил удалить его. apt-get remove mysql-server mysql-clientСначала я попробовал, но увидел, что артефакты нравятся /etc/mysqlи /var/lib/mysqlне удаляются.

Я тогда попробовал apt-get --purge removed mysql-server mysql-client, но все равно без разницы.

Итак, я вручную удалил их (через rm -rf). Я также вручную удалил все *mysql*файлы, /usr/которые были из любых mysql-*пакетов зависимостей, таких как mysql-common.

Однако теперь, когда я хочу переустановить mysql-server and -client, я обнаружил, что не могу.

На самом деле, сейчас я нахожусь в состоянии, когда не могу ни, apt-get remove mysql-serverни apt-get install mysql-server!

Как исправить ситуацию, в которой я нахожусь? Если метаданные моего локального хранилища пакетов повреждены, как я могу их восстановить?

Я не хотел бы переустанавливать всю благословенную ОС со всеми другими моими приложениями и средой, еще раз только из-за mysql-server.

Вот, например, ошибка, которую я получаю при попытке удалить mysql-server:

$ apt-get remove  mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  mysql-server
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 159 kB disk space will be freed.
Do you want to continue? [Y/n] 
(Reading database ... 237601 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

И при попытке установить, я получаю эту ошибку:

$ apt-get -f install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mysql-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 159 kB of additional disk space will be used.
Selecting previously unselected package mysql-server.
(Reading database ... 237599 files and directories currently installed.)
Preparing to unpack .../mysql-server_5.7.12-0ubuntu1_all.deb ...
Unpacking mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Вот вывод apt-get install -f:

$ apt-get install -f 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
Гарри
источник
Похоже , mysql-server-5.7находится в плохом состоянии, попробуйте переустановить его: sudo apt-get install --reinstall mysql-server-5.7.
fkraiem
Не имеет значения, я получаю ту же строку ошибки: ... invoke-rc.d: initscript mysql, action "start" failed. ...что я получаю с другими разновидностями команд установки.
Гарри
Попробуйте удалить его, а затем ... sudo apt-get remove --purge mysql-server-5.7. Обратите внимание, что это действительно mysql-server-5.7то, о чем мы говорим, а не mysql-server.
fkraiem
@ Гарри Много раз, я перезагружал систему, чтобы избавиться от этого типа ошибки.
маргаритка
Моя проблема решена с помощью этого поста
Raizal IN Pregnanta

Ответы:

80

Отредактировано 10 января 2017 : Это серьезный обзор этого поста для исправления серьезных проблем в этом посте.

Ошибка в глубине души

Проблема в том, что пакет все еще находится в системе в наполовину установленном и наполовину сконфигурированном состоянии и должен быть явно удален.

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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

На самом деле он говорит о том, что пакет mysql-server-5.7является зависимостью mysql-server, уже установлен, но не настроен. Так что вам нужно, чтобы purgeудалить те крошки, оставленные позади mysql-server-5.7.

sudo apt purge mysql-server mysql-server-5.7

обоснование

Когда вы устанавливаете программное обеспечение с помощью apt, оно автоматически обрабатывает зависимости и для вас.

Когда вы удаляете определенные пакеты, он может не обрабатывать те же зависимости. В случае с этим постом эта зависимость есть mysql-server-5.7.

Вы можете проверить состояние пакета, выполнив следующую команду.

dpkg-query -l [package-name-here]

Обычно, если вы видите код unили rcслева от имени пакета, вы сможете определить, действительно ли он поврежден.

Когда я столкнулся с этой проблемой, это было с libapache2-mod-phpи libapache2-mod-php7.0. Это был мой вывод.

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-============================================================
un  libapache2-mod-php          <none>             <none>             (no description available)

В моем случае он утверждал, что состояние моего пакета неизвестно и что он не установлен (код un) в моей системе.

Когда вы говорите , aptчтобы removeчто - то, он может оставить пакеты, файлы конфигурации, а также другие предметы , которые могут быть проблематичными во время автоматизированных установок.

Когда вы говорите , aptчтобы purgeчто - то он делает это лучше , чтобы удалить любые сухари , которые , removeвозможно , оставили позади.

Первоначально я заявил, что предположил, что процесс все еще работает, но, скорее всего, он был неактивным или мертвым.

Лучший способ проверить, влияет ли служба на удаление вашего пакета, - сначала проверить эту службу.

1) Исследование mysqlслужбы

Используя системную ошибку, данную нам apt, мы можем использовать ее systemctlдля проверки ошибки путем проверки состояния mysqlслужбы.

sudo systemctl status [pattern]

В нашем случае мы хотим посмотреть, запущен ли mysql, поэтому можно ввести

systemctl status mysql.service

Вы должны увидеть этот вывод, если служба работает

systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-01-10 23:10:06 EST; 1h 3min ago
 Main PID: 1206 (mysqld)
   CGroup: /system.slice/mysql.service
           └─1206 /usr/sbin/mysqld

примечание: если служба не работает, вы увидите короткое сообщение о том, что служба с таким именем не запущена, а затем перейдите к шагу 3.

2) Остановка mysqlслужбы с помощьюsystemctl

примечание: [шаблон] должен быть именем, указанным serviceили initctl. Я использую patternэто потому, что systemctlиспользует сопоставление с регулярным выражением, поэтому будьте осторожны, если вы должны использовать killаргумент.

sudo systemctl stop [pattern]

где patternпредставляет имя демона / службы mysql. если остановка не работает, попробуйте

sudo systemctl kill [pattern]

Например

sudo systemctl stop mysql

3) Удаление / очистка mysql

если вам нужно полностью очистить, сначала убедитесь, что служба или процесс остановлены, а затем убедитесь, что вы удаляете нужные файлы и каталоги!

Примечание. Убедитесь, что вы указали правильную mysqlверсию. Например, если вы используете 5.5, измените номер версии соответствующим образом.

ВНИМАНИЕ: следующие шаги удаляют ваши данные! (первая команда должна быть выполнена, чтобы сделать резервную копию)

Источник: Как мне удалить MySQL?

tar -zcvf ~/msql_backup.tar.gz /etc/mysql /var/lib/mysql 
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
sudo rm -rfv /etc/mysql /var/lib/mysql
sudo apt autoremove
sudo apt autoclean

4) Исправление поврежденных пакетов и обработка отсутствующих зависимостей

Если предыдущие шаги не работают для вас, вы , возможно , придется работать aptс --fix-brokenвозможностью отремонтировать любой ущерб , нанесенный.

Обязательно apt updateсначала, а потомapt install

sudo apt update    
sudo apt install mysql-server mysql-client --fix-broken --fix-missing

5) Когда ничего не помогает, соберите и установите mysqlсами

Если ничего из вышеперечисленного не работает, вам придется вручную загрузить исходный код, скомпилировать и использовать make или bash для установки оттуда (не так больно, как кажется, поскольку все автоматизировано).

Дэвид Фёрстер
источник
«16.04 изобилует множеством ошибок прямо сейчас». У меня работает, в том числе и MySQL. Мне кажется, что большинство проблем, которые мы здесь видим, возникают из-за того, что люди делают что-то не так, например, пытаются найти rmфайлы, принадлежащие пакетам.
fkraiem
1
Отличный рабочий приятель! Спасибо. я потратил впустую весь день, используя некоторые глупые инструкции. Теперь это сработало!
Renjith VR
Я следовал вашим инструкциям и sudo systemctl stop mysql, похоже, работал. Однако после перезагрузки он снова сломался. Пуск или остановка не работает. Состояние sudo systemctl mysql показывает: Активен: деактивирован (стоп-сигнал) с понедельника 2016-06-27 11:05:22 BST; 8min ago Должен ли я ДЕЙСТВИТЕЛЬНО ждать 10 минут для остановки mysql? Вас не удивляет, что люди очищают службу, которая не полностью прекратилась? Возможно ли, что Ubuntu 16.04 это исправит? Какие есть варианты, возвращаясь к предыдущей версии LTS или другому дистрибутиву?
ruby_object
Благодаря удалению и переустановке этот способ работал отлично!
Лоуки
5
примечание: sudo rm -rf /var/lib/mysqlудалит все ваши базы данных в расположении по умолчанию. Сделайте резервную копию в первую очередь!
Август
7

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

Скажи использовать;

apt search mysql-server

Это должно отобразить список пакетов, а именно

"mysql-server-5.7" "mysql-server-core-5.7" или более поздние выпуски

тогда;

dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7

сделанный.

e8hffff
источник
4

Это правильное решение для вас

Сначала вам придется удалить все пакеты mysql-сервера:

ВНИМАНИЕ: следующие шаги удалят ваши данные! Сначала сделайте резервную копию!

sudo rm -rf /var/lib/mysql

Затем установите:

sudo apt-get install lamp-server^

Или вы можете сделать:

sudo apt-get install mysql-server
Рохан
источник
0

я видел это

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.

как подсказка, что все еще существует ошибочный сценарий запуска.

Ищите /etc/init.d/mysqlи любые символические ссылки на него. Удаление этих файлов, по-видимому, исправило мои проблемы с переустановкой после очистки.

ghatzhat
источник
0

Эта ошибка также произошла при переключении с MySQL на MariaDB ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).

Файлы двоичных данных MySQL не были совместимы с MariaDB, поэтому я переключился на MySQL, потому что у меня не было времени возиться с mysqldump.

Сначала мне пришлось удалить данные MariaDB /var/lib/mysql, затем установить MySQL, а затем переместить исходные данные из /var/lib/mysql-5.7(эта резервная копия была автоматически создана до возникновения ошибки) в /var/lib/mysql.

baptx
источник
-2

Попробуйте apt-get -f installисправить ваш поврежденный пакет SQL и, если у вас все еще проблемы с менеджером пакетов, скачайте исходный код SQL сервера и скомпилируйте его !! Но попробуйте указанную выше команду, а также используйте, dpkg -l | grep sqlчтобы узнать, что менеджер пакетов все еще считает, что у вас SQL или нет ..

Али Гасемпур
источник
Не работал. Я также включил ошибку, которую я получаю при попытке установить пакет.
Гарри
@Harry Вы должны работать apt-get -f installсамостоятельно, без указания имени пакета.
fkraiem
Как сказал fkraim, используйте его без имени пакета ...
Али Гасемпур
Добавлен вывод apt-get install -f, без изменений.
Гарри
Попробуйте приложение synaptic и убедитесь, что оно говорит, что пакет поврежден или нет (в левом столбце) [если у вас есть рабочий стол]
Али Гасемпур