Niedawno zrobiłem nową instalację Ubuntu 16.04. Zainstalowałem również mysql-server
i mysql-client
(ich domyślna wersja 5.7.12) przez apt-get install
.
Ponieważ w 5.7.12 pojawiały się problemy, postanowiłem go odinstalować. apt-get remove mysql-server mysql-client
Najpierw spróbowałem, ale zobaczyłem, że artefakty takie jak /etc/mysql
i /var/lib/mysql
nie zostały usunięte.
Potem spróbowałem apt-get --purge removed mysql-server mysql-client
, ale nadal nie było różnicy.
Więc ręcznie je usunąłem (przez rm -rf
). Ręcznie usunąłem również wszystkie *mysql*
pliki /usr/
pochodzące z tych mysql-*
pakietów zależności, takich jak mysql-common
.
Jednak teraz, gdy chcę ponownie zainstalować mysql-server and -client
, okazuje się, że nie mogę.
W rzeczywistości jestem teraz w stanie, w którym nie mogę apt-get remove mysql-server
ani apt-get install mysql-server
!
Jak naprawić sytuację, w której się znajduję? Jeśli moje lokalne metadane repozytorium pakietów uległy uszkodzeniu, jak to naprawić?
Nie chciałbym ponownie instalować całego błogosławionego systemu operacyjnego ze wszystkimi innymi aplikacjami i środowiskiem, jeszcze raz z tego powodu mysql-server
.
Na przykład występuje błąd, który pojawia się przy próbie usunięcia 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)
Podczas próby instalacji pojawia się ten błąd:
$ 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)
Oto wynik 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
jest w złym stanie, spróbuj go ponownie zainstalować:sudo apt-get install --reinstall mysql-server-5.7
.... invoke-rc.d: initscript mysql, action "start" failed. ...
otrzymuję inne smaki poleceń instalacyjnych.sudo apt-get remove --purge mysql-server-5.7
. Zauważ, że tak naprawdęmysql-server-5.7
mówimy, niemysql-server
.Odpowiedzi:
Edytowano 10 stycznia 2017 r . : To jest główna recenzja tego postu w celu rozwiązania poważnych problemów w tym poście.
Błąd w sercu
Problem polega na tym, że pakiet nadal znajduje się w systemie w stanie częściowo zainstalowanym i częściowo skonfigurowanym i należy go wyraźnie usunąć.
To, co tak naprawdę mówi, to to, że pakiet
mysql-server-5.7
jest zależnymysql-server
, jest już zainstalowany, ale nie jest skonfigurowany. Musisz topurge
zrobić, aby usunąć pozostawione przez ciebie bułkę tartąmysql-server-5.7
.Racjonalne uzasadnienie
Gdy instalujesz oprogramowanie za pomocą
apt
, automatycznie obsługuje on również zależności.Po usunięciu niektórych pakietów może nie obsługiwać tych samych zależności. W przypadku tego postu ta zależność jest następująca
mysql-server-5.7
.Możesz sprawdzić stan pakietu, wydając następujące polecenie.
Zwykle jeśli zobaczysz kod
un
lubrc
po lewej stronie nazwy pakietu, będziesz w stanie stwierdzić, czy rzeczywiście jest to uszkodzony pakiet.Kiedy doświadczyłem tego problemu, było z
libapache2-mod-php
ilibapache2-mod-php7.0
. To był mój wynik.W moim przypadku twierdził, że status mojego pakietu jest nieznany i że nie jest zainstalowany (kod
un
) w moim systemie.Kiedy mówisz
apt
doremove
czegoś, to może pozostawić pakiety, pliki konfiguracyjne i inne przedmioty, które mogą być problematyczne podczas zautomatyzowanych instalacjach.Kiedy mówisz
apt
dopurge
czegoś, to robi to najlepiej usunąć okruszki, któreremove
mogły pozostawione.Pierwotnie powiedziałem, że zakładam, że proces nadal działa, ale najprawdopodobniej był nieaktywny lub martwy.
Najlepszym sposobem sprawdzenia, czy usługa zakłóca usunięcie pakietu, jest najpierw sprawdzenie tej usługi.
1) Badanie
mysql
usługiKorzystając z podanego nam przez nas błędu systemowego
apt
, możemy go rzeczywiściesystemctl
sprawdzić, sprawdzając statusmysql
usługiW naszym przypadku chcemy sprawdzić, czy mysql działa, więc możemy wpisać
Powinieneś zobaczyć to wyjście, jeśli usługa jest uruchomiona
Uwaga: jeśli usługa nie działa, zobaczysz krótki komunikat informujący, że usługa o tej nazwie nie działa, a następnie przejdź do kroku 3.
2) Zatrzymywanie korzystania z
mysql
usługisystemctl
Uwaga: [wzorzec] musi być nazwą wymienioną przez
service
lubinitctl
. powodempattern
jest to, żesystemctl
używa dopasowania wyrażenia regularnego, więc bądź ostrożny, jeśli musisz użyćkill
argumentu.gdzie
pattern
reprezentuje nazwę demona / usługi mysql. jeśli stop nie działa spróbujNa przykład
3) Odinstalowywanie / czyszczenie
mysql
jeśli musisz całkowicie wyczyścić, najpierw upewnij się, że usługa lub proces zostały zatrzymane, a następnie upewnij się, że usuwasz odpowiednie pliki i katalogi!
Uwaga: upewnij się, że wybierasz odpowiednią
mysql
wersję. Na przykład, jeśli używasz wersji 5.5, odpowiednio dostosuj numer wersji.UWAGA: następujące kroki usuną twoje dane! (aby wykonać kopię zapasową, należy wykonać pierwsze polecenie)
źródło: Jak odinstalować MySQL?
4) Naprawianie uszkodzonych pakietów i obsługa brakujących zależności
Jeśli wykonanie powyższych czynności nie działa, może trzeba uruchomić
apt
z--fix-broken
opcją naprawy wszelkich szkód wyrządzonych.Pamiętaj, aby
apt update
najpierw, a potemapt install
5) Gdy wszystko inne zawiedzie, zbuduj i zainstaluj
mysql
siebieJeśli żadne z powyższych nie zadziała, będziesz musiał ręcznie pobrać źródło, skompilować i użyć make lub bash, aby zainstalować stamtąd (nie tak bolesne, jak się wydaje, ponieważ wszystko jest zautomatyzowane).
źródło
rm
pliki należące do pakietów.sudo rm -rf /var/lib/mysql
usunie wszystkie bazy danych w domyślnej lokalizacji. Najpierw wykonaj kopię zapasową!Problem z pierwszym postem polega na tym, że nie można rekonfigurować dobrze meta-pakietu, nie dla elementów sql. Musisz podać bieżący element wydania.
Powiedz użycie;
To powinno wyświetlić listę pakietów, a mianowicie
„mysql-server-5.7” „mysql-server-core-5.7” lub nowsze wersje
następnie;
gotowy.
źródło
To jest właściwe rozwiązanie dla Ciebie
Najpierw musisz usunąć wszystkie pakiety mysql-server:
Następnie zainstaluj:
Lub możesz zrobić:
źródło
zobaczyłem to
jako wskazówka, że nadal istniał błędny skrypt startowy.
Szukaj
/etc/init.d/mysql
i wszelkie dowiązania symboliczne do niego. Usunięcie ich pojawiło się, aby naprawić problemy z ponowną instalacją po czyszczeniu.źródło
Ten błąd wystąpił także podczas przełączania z MySQL na MariaDB ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).
Pliki danych binarnych MySQL nie były kompatybilne z MariaDB, więc wróciłem do MySQL, ponieważ nie miałem czasu zadzierać z mysqldump.
Najpierw musiałem przenieść dane MariaDB
/var/lib/mysql
, a następnie zainstalować MySQL, a następnie przenieść moje oryginalne dane/var/lib/mysql-5.7
(ta kopia zapasowa została utworzona automatycznie przed błędem) do/var/lib/mysql
.źródło
Spróbuj
apt-get -f install
naprawić uszkodzony pakiet SQL, a jeśli nadal masz problem z menedżerem pakietów, pobierz kod źródłowy serwera SQL i skompiluj go !! Ale wypróbuj powyższą komendę, a także użyj,dpkg -l | grep sql
aby dowiedzieć się, czy menedżer pakietów nadal myśli, że używasz SQL, czy nie.źródło
apt-get -f install
się sam, bez podawania nazwy pakietu.apt-get install -f
, bez zmian.