Недавно я сделал новую установку 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)
решение1
Отредактировано 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. Если stop не работает, попробуйте
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 для установки (это не так сложно, как кажется, поскольку все автоматизировано).
решение2
Проблема с первым постом в том, что вы не можете перенастроить метапакет, ну, не для элементов 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
сделанный.
решение3
Это правильное решение для вас.
Сначала вам придется удалить все пакеты mysql-server:
ВНИМАНИЕ: следующие шаги удалят ваши данные! Сначала сделайте резервную копию!
sudo rm -rf /var/lib/mysql
Затем установите:
sudo apt-get install lamp-server^
Или вы можете сделать:
sudo apt-get install mysql-server
решение4
Эта ошибка также возникла при переключении с 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
.