Aktualizacja 16.04 zepsuła serwer mysql

127

Moje ogólne uaktualnienie poszło dobrze, ale wciąż mam krytyczny problem polegający na tym, że serwer mysql nie jest w stanie zainstalować się sam i nic, co próbuję, nie działa.

Oto błąd, który widzę podczas próby instalacji / ponownej instalacji:

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)

Próbowałem go całkowicie usunąć, ale próbuję zainstalować MariaDB z powodu zależności (?). Wszelkie sugestie dotyczące tego, co mogę zrobić, aby to naprawić, byłyby bardzo mile widziane.

EDYCJA: Wygląda na to, że nie jestem jedyny: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

TheGremlyn
źródło
Mam ten sam problem tutaj .
KernelPanic
1
Musiałem odinstalować phpmyadmin, co w jakiś sposób powodowało problemy z zależnością. Po ponownej instalacji wszystko znów działa poprawnie.
Hinrich
1
aktualizacja do-release z Ubuntu 14 do 16 wykonuje nieobsługiwaną aktualizację z MySQL 5.5 do 5.7, więc oczekuje się, że MySQL zostanie później uszkodzony, jak podano tutaj: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug /…
Marco Marsala
1
@MarcoMarsala Nie wiem, czy możemy powiedzieć, że oczekuje się, że MySQL zostanie zepsuty po aktualizacji Ubuntu 14 do 16, ale przypuszczam, że zależy to od twojej perspektywy. Dla przeciętnego użytkownika z pewnością nie oczekuje się, że aktualizacja LTS zepsuje coś takiego jak MySQL. Zaskakujące, że nie zostało złapane podczas testów.
TheGremlyn
apt install phpmyadmin - reinstall naprawiono powyższe bez potrzeby dotykania mysql po ... idź rysunek
Andy

Odpowiedzi:

119

Instrukcje zamieszczone przez @ andrew-beerman są na dobrej drodze, choć nie są dla mnie jasne i wydają się zalecać więcej niż to konieczne. Ułożyłem odpowiedź z powyższego i pomocny post w wątku błędu.

Oto kroki, które podjąłem, aby to naprawić:

  1. Kopię zapasową my.cnf filein /etc/mysqli usunąć lub zmienić jego nazwę

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Usuń folder /etc/mysql/mysql.conf.d/za pomocą

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Sprawdź, czy nie masz my.cnfpliku ukrytego gdzie indziej (zrobiłem w moim domowym katalogu!) Lub w /etc/alternatives/my.cnfużyciu

    sudo find / -name my.cnf
    
  4. Utwórz kopię zapasową i usuń /etc/mysql/debian.cnfpliki (nie jestem pewien, czy to konieczne, ale na wszelki wypadek)

    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. W przypadku, gdy Twój syslog pokazuje błąd typu „mysqld: Nie można odczytać katalogu z„ /etc/mysql/conf.d/ ””, utwórz dowiązanie symboliczne:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Wtedy usługa powinna zacząć sudo service mysql start.

To działało!

TheGremlyn
źródło
17
po tych wszystkich operacjach (zrobiłem to wcześniej) nadal mam te same błędy ...
Serge
5
Musisz usunąć każdy plik my.cnf. * Z katalogu / etc / mysql. Poszukaj my.cnf.backup, my.cnf.fallback i my.cnf.migrated - wszystkie te pliki również muszą zostać usunięte (najpierw kopia zapasowa!)
hitzi
8
@SergiiP sudo find / -name "my.cnf"może się przydać.
starbeamrainbowlabs
1
mysql-server-core-powinien być mysql-server-core-5.7. W przeciwnym razie działało jak urok. Dziękuję Ci!
David Tay
1
+1. Zrobiłeś mój dzień! Również rano i wieczorem! Utknąłem.
Max Yudin
56

Dzisiaj mam ten sam problem, po wypróbowaniu wielu rozwiązań stwierdziłem, że problemem było polecenie, sudo systemctl disable mysql.servicektórego użyłem do wyłączenia automatycznego uruchamiania MySQL, więc aby go uruchomić, ponownie włączyłem serwer MySQL za pomocą polecenia sudo systemctl enable mysql.servicei uruchomiłem ponownie proces aktualizacji i zakończyło się idealnie.

Tryb Naruto Biju
źródło
5
Natknąłem się na ten sam problem i ta sama poprawka zadziałała dla mnie.
Allen
5
Pracował dla mnie. Czy każde rozwiązanie tutaj, mysql działało po tym.
Błażej Michalik
6
To samo tutaj - powinien to być najwyższy post.
a1phanumeric
3
Pracowałem też dla mnie! Dziękuję bardzo. Mówiąc wprost, uruchom: sudo systemctl enable mysql.servicea po tym uruchomieniu sudo apt install -f.
Fernando Paladini,
To wszystko, co musiałem zrobić. Wyłączyłem autostart, jak opisano w @naruto. Włączyłem autostart i uruchomiłem „sudo apt upgrade”. Teraz naprawione. Powinna być najlepsza odpowiedź. Jest to znacznie prostsze, bardziej standardowe i mniej podatne na problemy rozwiązanie.
Jack Holt,
20

Twój komunikat o błędzie zawiera następujący wiersz:

subprocess installed post-installation script returned error exit status 1

Jednak installed post-installation scriptnie jest to wymienione z nazwy. Po wielu majstrowaniach dowiedziałem się, że jego nazwa to (w moim przypadku) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Otwórz ten plik za pomocą sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinstlub preferowanego edytora.

Na górze zmień wiersz 3 (lub tak): set -ena set -x, zapisz plik. (opcja -eto „wyjście z błędów -x”, prawdopodobnie „jawnie pokaż polecenie wykonane”)

Uruchom sudo dpkg --configure -a --log /tmp/dpkg.log (opcja --log jest opcjonalna). Możesz również uruchomić, apt upgradejeśli wiesz, że będzie to jedyny pakiet, który zostanie zaktualizowany.

Teraz otrzymujesz pełne dane wyjściowe mysql-server-5.7.postinstskryptu bash i możesz dowiedzieć się, co jest nie tak.

W moim przypadku próba (ponownego) uruchomienia nie powiodła się mysql_upgrade, ale nie było to konieczne w przypadku mojej dostosowanej instalacji mysql. Byłem pewien, że już wcześniej uruchomiłem go ręcznie i wszystko poszło dobrze.

Skomentowałem więc linię 321 (dla starszych wersji mysqld wypróbuj linię 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

a polecenie, które wcześniej nie sudo apt upgradedziałało (uruchom ponownie), zakończyło się pomyślnie, a dpkg usunął status błędu dla tego pakietu.

Teraz możesz cofnąć set -xdo set -e(wspomniane powyżej). I opcjonalnie odkomentuj linię mysql-upgrade.

Dodatkowa praca może być wymagana, jeśli partycja danych mysql została przeniesiona do niestandardowej lokalizacji. Przeniesiłem mój z /var/lib/mysql/datainnego dysku za pośrednictwem dowiązania symbolicznego. Następnie może być konieczne tymczasowe usunięcie dowiązania symbolicznego, przed postinstmanipulacją skryptem. Następnie utwórz go ponownie po uruchomieniu aktualizacji pakietu.

Po kolejnej drobnej aktualizacji pakietu mysqld debian ten problem ze /var/lib/dpkg/info/mysql-server-5.7.postinstskryptem może pojawić się ponownie.

knb
źródło
Ostatecznie
wyczyściłem
Dokładnie to samo przydarzyło mi się, a twoje kroki rozwiązały to. Bur dla mnie moje wywołanie mysql_upgrade było na linii 320. Czy możesz wyjaśnić, dlaczego zwraca niezerową wartość po wywołaniu ze skryptu postinst?
emiliopedrollo
@emiliopedrollo Nie Nie mogę tutaj wyjaśnić. Ale myślę, że numer linii to teraz 320, ponieważ ostatnio opiekunowie pakietów ulepszyli skrypt poinstalacyjny, zauważyłem to samo innego dnia podczas ostatniego uruchomienia programu aktualizującego oprogramowanie (który zawierał nowy pakiet mysql-deb-pakiet) .
knb
Dzięki! Dzięki set -eniemu udało mi się znaleźć dokładny problem - MySQL nie miał dostępu dla określonego użytkownika systemu Ubuntu /etc/mysql/debian.cnf . Dodałem więc tego użytkownika do MySQL i nadałem uprawnienia, uruchomiłem dpkgponownie i zadziałało!
Allen Hamilton
17

Instrukcje tutaj naprawiły to na moim serwerze: https://bugs.mysql.com/bug.php?id=72722

Rozumiem ból związany z niespójnym systemem, ale nie martwmy się całą sytuacją i krok po kroku, aby system był czysty.

Najpierw zobaczmy aktualny stan wszystkich pakietów mysql na komputerze za pomocą: dpkg -l | grep mysql (Wklej dane wyjściowe z wyłączeniem ostatniej kolumny)

Pierwsza kolumna oznacza bieżący status paczki. Oto możliwe opcje:

ii) Zainstalowane rc) Zachowane usunięte pliki konfiguracyjne (powinien to być stan wszystkich pakietów, które usunąłeś za pomocą polecenia „apt-get remove”, które nie usuwają plików konfiguracyjnych w / etc)

Aby to zadziałało, musisz uruchomić polecenie „apt-get purge <nazwa_pkg>”, dopóki nie zobaczysz żadnych pakietów na powyższej liście.

Pamiętaj, że niektóre pakiety nie będące serwerami mysql, takie jak python-mysql.connector i python-mysqldb, jeśli są zainstalowane, nie muszą być usuwane, ponieważ nie mają żadnego wpływu na tę sytuację, ale ich usunięcie może powodować problemy z aplikacjami, które z nich korzystają.

Na pewno spróbujemy ponownie odwiedzić nasze dokumenty, aby zobaczyć, jak możemy uchronić użytkowników przed takimi problemami. Dziękujemy za szczegółowe podzielenie się z nami swoją opinią.

Andrew Beeman
źródło
2
Dzięki za dpkg -l | grep mysql . Pomogło zrozumieć kierunek.
Max Yudin
polecenie było niepoprawne przy czyszczeniu, musi być sudo apt-get purge <pkg-name>naprawione przez edycję, ale: Użyłem znaków Unicode, <ponieważ w przeciwnym razie nie byłby wyświetlany. Ostrzegam, kopiuj wklejając to polecenie
Toskan
3

W moim przypadku za pomocą strace zobaczyłem, że / var / run / mysqld / nie istnieje i mysqld nie może utworzyć pliku mysqld.sock.

Te polecenia rozwiązały mój problem:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Teraz:

systemctl start mysql

I mysql znów działa :)

Leonardo Catalinas
źródło
Sugeruję dodanie tych linii do / usr / share / mysql / mysql-systemd-start, zaczynając od linii 25, wtedy nie będziesz musiał ponownie tworzyć tego katalogu po każdym ponownym uruchomieniu (przepraszam, że linie nie działają w tym komentarzu) : Jeśli [ ! -d / run / msyqld]; następnie mkdir -p -m0755 / run / mysqld || {echo "Nie można utworzyć / uruchomić / mysqld"; wyjście 1; } chown mysql: mysql / run / mysqld || {echo "Nie można chown / run / mysqld"; wyjście 1; } fi
scoobydoo
3

W moim przypadku mogę rozwiązać problem, dodając

# 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,

do /etc/apparmor.d/local/usr.sbin.mysqld

Aby uzyskać więcej informacji, zapoznaj się z moją odpowiedzią (autorstwa ChristophS) dotyczącą stackoverflow.

ChristophS
źródło
0

Miałem ten sam problem. Próbowałem ponownie zainstalować mysql kilka razy, ale bez powodzenia.

Zrozumiałem, że problemem dla mnie jest to, że inny proces mysql już działa.

W szczegółach:

Po dokładnym przeczytaniu loguję się /var/log/mysql/error.logi znalazłem:

[BŁĄD] Nie można uruchomić serwera: Powiązanie na porcie TCP / IP: Adres już używany

[BŁĄD] Czy masz już inny serwer mysqld działający na porcie: 3306?

Wygląda na to, że inna aplikacja używała już portu.

Sprawdziłem to za pomocą 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=

I zabiłem trwający proces sudo kill -15 14706

Potem uruchomiłem mysql: /etc/init.d/mysql start

Nareszcie mysql działa dla mnie! Mam nadzieję, że to komuś pomoże.

Milkovsky
źródło
0

Żadna z odpowiedzi na tej stronie nie działała dla mnie.

Skończyło się na stronie pobierania Oracle , pobieraniu mysql-apt-config_0.8.8-1_all.debi instalowaniu MySQL z repozytorium Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
ostrokach
źródło
2
isntall-> installliterówka. Głupie SO nie pozwala mi poprawić jednej postaci.
Csaba Toth,
Dlaczego poszedłeś do wyroczni, aby pobrać mysql
Sinscary
@Sinscary Ta odpowiedź pochodzi z jakiegoś czasu, ale prawdopodobnie dlatego, że mieli nowszą wersję niż menedżer pakietów systemowych?
ostrokach
0

Mam problem na kilku serwerach. Poprawka polegała na uruchomieniu apt install phpmyadmin - reinstall

które rozwiązało powyższe (bez konieczności dotykania mysql później)

Andy
źródło