apt-get zawiesza się podczas aktualizacji mysql-server-5.1

9

Kiedy próbuję wykonać następujące czynności:

sudo apt-get update
sudo apt-get upgrade

w mojej instalacji Ubuntu Server 10.04 zawiesza się w następującej linii:

Preparing to replace mysql-server-5.1 5.1.41-3ubuntu12.1 (using .../mysql-server-5.1_5.1.41-3ubuntu12.3_i386.deb)

Nie mogę nawet z tego CTRL-C! W końcu muszę zakończyć sesję i zalogować się z innego terminala, a proces aktualizacji wciąż trwa. Ponownie uruchomiłem go kilka razy, a kiedy wrócę i spróbuję ponownie, powie mi:

E: dpkg was interrupted, you must manually run 'sudo --configure -a' to correct the problem.

Gdy to zrobię, wracam do punktu wyjścia i zawiesza się, gdy próbuję zaktualizować mój SQL.

Obrabować
źródło
1
i to też byłbyś
nik
2
@nik: i? nie powinien zadawać jednego pytania w dwóch miejscach? dobrze jest pisać w dwóch miejscach? pokazujesz, że wiesz, jak korzystać z Google?
msw
2
@msw, To nie był negatywny komentarz ani popis. Właściwie myślałem, że znalazłem inne odniesienie do podobnego problemu ... ale okazało się, że nie jest tak.
nik
@msw: Cross-Posting jest ... kontrowersyjny. Oczywiście maksymalizuje to możliwość otrzymania odpowiedzi, ale będą też różne „zespoły” pracujące nad tym samym, prawdopodobnie wymyślające te same sugestie i po prostu marnujące swój czas.
Bobby
Powodem, dla którego tutaj napisałem, było to, że nie otrzymuję żadnej odpowiedzi na stronie ubuntuforums.org. Nie muszę chyba dodawać, że nie będę ich teraz używać jako zasobu technologicznego :)
Rob

Odpowiedzi:

2

Spróbuj wykonać poziom poniżej apt po utworzeniu kopii zapasowej baz danych:

sudo dpkg -r mysql-server
sudo apt-get check    # verify that apt's metadata is okay
sudo apt-get install mysql-server

dodano :

Ponieważ dpkg -rdusi się, spróbuj dpkg --purgezawieść, aby uzyskać zawartość pakietu za pomocą dpkg -L mysql-server-5.1zap, a następnie wsunąć /var/lib/dpkg.

Przepraszam, nigdy nie widziałem, żeby robiło się tak owłosione.

jeśli na początku ci się nie uda

Trochę myślę tutaj głośno, wybacz mi. Meta-pakiet mysql-server zawiera lub wymaga następujących pakietów:

libdbd-mysql-perl
libdbi-perl
libhtml-template-perl
libnet-daemon-perl
libplrpc-perl
mysql-client-5.1
mysql-client-core-5.1
mysql-server
mysql-server-5.1
mysql-server-core-5.1

Metadane do zarządzania pakietami są rozkosznie rozdzielone, istnieją centralne repozytoria, ale pakiety są autonomiczne. /var/cache/apt/archivesto gdzie *.debpliki, które zostały zainstalowane na żywo.

Po pierwsze, zmuś dpkg, aby zapomniał o tych pakietach (na ryzyko niepowodzenia usunięcia niektórych plików, które zamierzamy zastąpić).

for i in mysql-server-core-5.1 mysql-server-5.1 ... ; do
    sudo dpkg -r --force-remove-reinstreq $i
done

Następnie pobierz pliki .deb potrzebne do pełnej instalacji:

sudo apt-get install --download-only mysql-server

a następnie spróbuj zainstalować je jeden po drugim:

cd /var/cache/apt/archives
sudo dpkg -i mysql-server-core-5.1_5.1.41-3ubuntu12.3_i386.deb

jeśli masz problemy, spróbuj:

sudo dpkg -D77777 -i mysql-server-core-5.1... > 2>&1 /tmp/dpkg.log.$$

I spróbuj znaleźć odpowiednie wiersze z zillionu w pliku dziennika i opublikuj je tutaj. Powodzenia i boskiej prędkości.

msw
źródło
Kiedy robię „dpkg -r mysql-server”, mówi, że nie jest zainstalowany. Próbuję więc „dpkg -r mysql-server-5.1” i mówi: Pakiet jest w bardzo złym niespójnym stanie - powinieneś go ponownie zainstalować przed próbą usunięcia.
Rob
Zakładam, że próbowałeś „dpkg -r mysql-server-5.1” i nie powiodło się?
msw
Tak, to się nie udaje. Rozpoznaje, że tam jest, ale mówi: „Pakiet jest w bardzo złym niespójnym stanie - należy go zainstalować ponownie przed próbą usunięcia”.
Rob
„dpkg --purge” daje ten sam błąd. Czy powinienem więc po prostu usunąć wszystkie pliki wymienione jako „dpkg -L mysql-server-5.1”? A co masz na myśli przez „muck” na temat w / var / lib / dpkg?
Rob
dodano kolejny etap
msw
6

Najwyraźniej aktualizacja czeka na uruchomienie serwera iz jakiegoś powodu tak się nie dzieje. Aby rozwiązać problem, istnieje kilka możliwości.

Najłatwiejszym:

  1. Otwórz nowy terminal i uruchom:

    sudo services mysql start
    

Bardziej skomplikowane, ale czasem konieczne: (jest to przydatne, gdy nie masz dostępu do innego terminala):

  1. Naciśnij „^ z” ( Ctrl+ Z), co „ZATRZYMA” zadanie. Następnie uruchomić:

    sudo services mysql start
    
  2. Po uruchomieniu serwera wpisz następujące polecenie i naciśnij klawisz Enter:

    fg 
    

    Spowoduje to umieszczenie zadania „STOPPED” z powrotem na pierwszym planie i kontynuowanie tam, gdzie zostało przerwane.

Matt
źródło
W moim przypadku rzeczywiście czekał na uruchomienie serwera.
izak
Mimo że komenda start powiedziała, że ​​już działa, w ciągu kilku sekund apt-get kontynuuje pracę w porządku. Dzięki
Liam Wheldon
2

Miałem ten problem, ponieważ była to kopia maszyny wirtualnej, więc zmieniłem adres IP serwera, ale nie zmieniłem adresu powiązania w pliku my.cnf. Po zmianie adresu powiązania na zgodny aktualizacja nie zawiesiła się i zakończyła pomyślnie.

Andrzej
źródło
1

Napotkałem ten sam problem i spędziłem ponad dzień na debugowaniu go.

Po usunięciu katalogu bazy danych /var/lib/mysql/instalacja przebiegła bezproblemowo.

Puru Choudhary
źródło
2
Należy to jednak robić ostrożnie, prawda?
slhck
1

Miałem dokładnie ten problem, ale żadne z istniejących rozwiązań nie wydawało się odpowiednie. Wymuszenie deinstalacji powinno być niepotrzebne w żadnym * nixie i zdecydowanie nie jest KISS. W moim przypadku okazało się, że przyczyna była prosta. MySQL odmówił uruchomienia, ponieważ wciąż działał! Kiedy apt próbował zatrzymać MySQL, był aktywny i nigdy się nie zatrzymał.

Jak zawsze upewnij się, że masz kopie zapasowe!

Zatrzymaj usługę:

sudo service mysql stop

Upewnij się, że usługa już nie działa:

sudo ps ax | grep mysql

Jeśli nadal działa, daj mu trochę czasu:

sudo kill <pid>

Ale ostatecznie, jeśli nadal działa, musisz go zabić agresywnie:

sudo kill -9 <pid>

Po potwierdzeniu, że nie działa, możesz kontynuować aktualizację.

Po zakończeniu aktualizacji, zwłaszcza jeśli trzeba było zabić -9, należy uruchomić mysqlcheck, aby upewnić się, że cokolwiek, co mogło spowodować, że usługa się nie zatrzymała, nie jest uszkodzoną lub zepsutą tabelą. Upewnij się także, że masz regularne kopie zapasowe (i upewnij się, że faktycznie działają!).

zaTricky
źródło
0

W moim przypadku wystąpił problem z istniejącym plikiem /etc/mysql/my.cnf. Sprawdzanie dziennika błędów w pliku /var/log/mysql/error.log ujawniło się:

150112  5:45:47 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
150112  5:45:47 [ERROR] Do you already have another mysqld server running on port: 3306 ?
150112  5:45:47 [ERROR] Aborting

150112  5:45:47  InnoDB: Starting shutdown...
150112  5:45:52  InnoDB: Shutdown completed; log sequence number 0 1883376705
150112  5:45:52 [Note] /usr/sbin/mysqld: Shutdown complete

Oczywiście może istnieć inny problem z my.cnf, ale w moim przypadku chodziło o to, że próbowaliśmy połączyć się ze starym adresem IP. Zmiana na:

bind 127.0.0.1

naprawiłem to i nie ma problemu z uruchomieniem

rainkinz
źródło