„Nie powiodło się odrodzenie głównego procesu mysql: nie można wykonać: brak takiego pliku lub katalogu”

56

Jestem nowicjuszem na ziemi MySQL, więc proszę o wyrozumiałość.

Właśnie zakończyłem aktualizację 11.10 do 12.04.

Wydawało się, że wszystko działa bez żadnych problemów, a całe moje oprogramowanie i ustawienia działają dobrze. Oprócz MySQL.

Kiedy próbuję:

sudo start mysql

Otrzymuję błąd:

start: Job failed to start

Gdzie mogę zdiagnozować, na czym polega problem? I (mam nadzieję) - jak to rozwiązać?

(Wyłączyłem automatyczny start, postępując zgodnie ze wskazówkami tutaj, jeśli ma to jakieś znaczenie)


Aktualizacja 1:

Oba wyjścia:

cat /var/log/mysql.err 
cat /var/log/mysql.log

są puste.

Wyjście dmesg | grep mysql:

[ 1401.785141] type=1400 audit(1335619832.181:25): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=16165 comm="apparmor_parser"
[ 1401.791089] init: Failed to spawn mysql main process: unable to execute: No such file or directory

Aktualizacja 2:

Jak wskazano poniżej przez AWinter - wydawało się, że MySQL zniknął automatycznie po aktualizacji i musiał zostać ponownie zainstalowany.

radek
źródło

Odpowiedzi:

48

Sprawdź, czy pakiet mysql-server-5.1 został odinstalowany, wygląda na to, że może się utrzymywać po aktualizacji. Miałem ten sam błąd i musiałem wyczyścić serwer MySQL 5.1 i 5.5, a następnie ponownie zainstalować.

Najpierw wykonaj kopię zapasową katalogu / var / lib / mysql /, aby zachować bezpieczeństwo.

sudo cp -R /var/lib/mysql/ ~/mysql

Następnie wyczyść MySQL (spowoduje to usunięcie php5-mysql i phpmyadmin, a także kilku innych bibliotek, więc przygotuj się do ponownej instalacji niektórych elementów po tym.

sudo apt-get purge mysql-server-5.1 mysql-common

Usuń folder / etc / mysql / i jego zawartość

sudo rm /etc/mysql/ -R

Następnie sprawdź, czy twoje stare pliki bazy danych nadal znajdują się w katalogu / var / lib / mysql /, jeśli ich nie ma, a następnie skopiuj je z powrotem do folderu, a następnie sprawdź root: root

(uruchom je tylko wtedy, gdy plików już nie ma)

sudo mkdir /var/lib/mysql/
sudo chown root:root /var/lib/mysql/ -R
sudo cd ~/mysql/
sudo cp * /var/lib/mysql/ -R

Następnie zainstaluj serwer mysql

sudo apt-get install mysql-server

Na koniec zainstaluj ponownie wszystkie brakujące pakiety, takie jak phpmyadmin i php5-mysql.

AWinter
źródło
1
Doskonały. Działał jako urok. Wszystko znów działa. Jedna uwaga: nie musiałem usuwać tego katalogu sudo rm /etc/mysql/ -R- w moim przypadku po prostu go nie było. W każdym razie - na szczęście była to tylko lokalna instalacja do testowania Wordpress. Zastanawiam się, co by się stało na prawdziwym serwerze o_O
radek
apt-get --reinstall install mysql-server-xx wykonał to za mnie.
Yashima,
To działało dla mnie, ale prawdopodobnie powinienem był zrobić to apt-get updatewcześniej, ponieważ usunęło dovecot i php5-mysql. Mogłem je ponownie zainstalować dopiero po aktualizacji. Gdy to zrobiłem, wszystko znów działało dobrze.
AntonChanning,
Dostaję -bash: cd: /var/lib/mysql/: Permission deniedi używanie sudo -inawet nie działa.
Charlotte
@LittleBigBot Dokonałem zmiany, która powinna to naprawić.
AWinter
15
sudo dpkg-reconfigure mysql-server-5.5
Kevin C. Smith
źródło
Niezbyt przyjazna odpowiedź, ale dla mnie zadziałała :-)
Joseph
1
Nie działało dla mnie: [
ThomasReggi
12

Miałem ten sam problem i dla mnie było to, że pliki dziennika InnoDB były innego rozmiaru niż się spodziewał mysql i po aktualizacji nie powiodły się.

Miałem niestandardowy plik konfiguracyjny, który został usunięty podczas aktualizacji do wersji 12.04, który ustawia rozmiary plików dziennika na coś innego niż domyślna konfiguracja.

Musisz usunąć pliki: / var / lib / mysql / ib_logfile *

Po zniknięciu plików mysql może teraz uruchomić i utworzyć nowe pliki dziennika o domyślnym rozmiarze.

Corey Aufang
źródło
Bingo W naszym przypadku dev zmienił niektóre ustawienia konfiguracji dla innodb (i ani on, ani ja nie wiedzieliśmy, że to może powodować problem). Zapobiegło to uruchomieniu mysql. Usunięcie tych plików konfiguracyjnych pozwoliło na uruchomienie MySQL.
gaoshan88
Bingo - zmieniono ustawienie konfiguracji dla innodb_log_file_sile.
tweak2
9

Większość błędów pojawi się, uruchamiając serwer w pełnym trybie innym niż demon i obserwując dane wyjściowe:

sudo mysqld --verbose
Ian Mackinnon
źródło
7

Miałem ten sam problem, ale żadna z powyższych odpowiedzi nie pomogła mi. Więc jako ostatnia nadzieja próbowałem zwolnić trochę miejsca na dysku. Po prostu usuwam niepotrzebne pliki dziennika z katalogu / var / log, co zwolniło trochę przestrzeni 2,5G. Następnie MySQL zaczął działać normalnie.

Oko
źródło
Tak, to był również mój problem. mysql nie uruchamiał się podczas uruchamiania, tak jak wcześniej. Później pojawiły się informacje o systemie, które są renderowane do terminala; „Wykorzystanie /: 95,1%” Tak więc nie było wystarczającej ilości wolnego miejsca do uruchomienia mysql (i innych procesów). Musiałem zrobić czyszczenie plików, a mysql uruchomił się bez problemu.
Screenack
To była moja sprawa. Oczyszczanie dysku i Mysql zaczynają działać.
Siergiej Romanow
5

Zdarza się to czasem i chociaż istnieje kilka różnych problemów, które mogą spowodować, że mysql się nie uruchomi, napiszę tutaj niektóre z najczęstszych, o których wiem:

UWAGA - Ponieważ wyjaśniając najczęstsze problemy, zakładam, że próbowałeś już usunąć i zainstalować lub po prostu ponownie zainstalować usługę mysql w następujący sposób:

Aby zainstalować - sudo apt-get install mysql-server mysql-client
Aby usunąć - sudo apt-get remove mysql-server mysql-client
Aby wyczyścić (Usuń pliki + Konfiguracja) - sudo apt-get purge mysql-server mysql-client
Aby ponownie zainstalować -sudo apt-get install --reinstall mysql-server mysql-client

  1. my.cnfplik nie znajduje się w domyślnym katalogu. Powinien on (domyślnie) znajdować się w jednym /etc/my.cnflub /etc/mysql/my.cnf.

  2. Za mało miejsca na dysku twardym, na którym znajdują się pliki danych mysql. Jeśli bazy danych staną się zbyt duże i zajmą 100% dysku twardego, usługa zakończy się niepowodzeniem.

  3. Po aktualizacji sprawdź, czy my.cnfplik znajduje się we właściwym miejscu. W zależności od tego, w jaki sposób zaktualizowałeś lub z jakiej wersji zaktualizowałeś, może być w /etc/my.cnflub /etc/mysql/my.cnfjak wspomniano wcześniej. Pamiętaj również, że plik może być nazwany mysql.confi nie tylko my.cnf. Dzieje się tak w przypadkach, gdy pobrałeś plik binarny z mysql.com .

  4. Wykonanie a, dmesgaby zobaczyć, czym jest usługa mysql, jest generowane, ponieważ pomaga komunikat o błędzie, ponieważ powoduje błąd ładowania. Może również powiedzieć, dlaczego tak się dzieje. Jeśli wpiszesz dmesgsam w terminalu, pokaże ci świat. Chcemy informacji o mysql, więc zrób coś takiego: dmesg | grep mysqlspowoduje to wyświetlenie wszystkich wierszy zawierających mysql.

  5. Sprawdź, my.cnfczy mysql.confplik lub jest poprawny. W 12.04 MySQL jest w wersji 5.5, w 11.10 jest to wersja 5.1. Może mieć pewne zmiany w pliku conf (właściwie tego nie sprawdziłem) i może zabrzmieć głupio, ale z pewnością może sprawić ci problemy.

  6. Błędy związane z problemami związanymi z gniazdami są zwykle błędami pliku my.cnflub mysql.confwskazującymi niewłaściwe miejsce, błąd zwykle pokazuje się jako:

    Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo „/var/run/mysqld/mysqld.sock”

    Inne źródło tego problemu jest związane z mysqlplikiem /etc/init.d, ponieważ wskazuje na niewłaściwy folder, ponieważ może używać starszego skryptu niż ten wymagany dla rzeczywistego mysql w systemie (może nie zostać poprawnie zaktualizowany, nie nadpisuje plik konfiguracyjny itp.). Po prostu edytuj dowolny z tych dwóch plików i sprawdź, czy wskazują one gdzie indziej, a następnie po prostu zrób, sudo service mysql restartaby sprawdzić, czy to działa.

  7. Aby lepiej przyjrzeć się konkretnym wynikom błędu mysql, wykonaj następujące czynności:

    cat /var/log/mysql.err- Pokaże błędy MySQL. Zrobiłbym to w ten sposób, cat /var/log/mysql.err | lessjeśli zobaczysz, że przelatuje za dużo informacji, ponieważ lesspomoże ci przewinąć wyjście cat.

    To samo dotyczy cat /var/log/mysql.logJeśli zobaczysz błąd, być może postawienie go w pytaniu lub jako komentarz pomoże szybciej odpowiedzieć na to pytanie.

  8. Jeśli występują problemy z połączeniem i usługa, którą faktycznie działa, spróbuj sprawdzić, czy zapora ogniowa serwera zezwala na połączenia przez port 3306 (połączenia przychodzące). Następnie sprawdź, czy router (jeśli dotyczy) nie zablokował portu 3306. Zasadniczo wykonaj test sieci, aby zobaczyć, skąd pochodzi problem związany z portem przypisanym do mysql.

Jeśli wszystko jest w porządku, sprawdź, czy usługa mysql działa service mysql status

W ostateczności. Jeśli akurat używasz mysql, ale nie możesz się zalogować, spróbuj wykonać następujące czynności:

  1. Zatrzymaj serwer MySQL:

    sudo /etc/init.d/mysql stop lub sudo service mysql stop

  2. Uruchom mysqldusługę ręcznie z ręczną konfiguracją

    sudo mysqld --skip-grant-tables &

    (Pamiętaj, aby dodać & inaczej będziesz musiał otworzyć inny terminal. & Wysyła proces do tła i możesz zabić używając tego samego terminala).

  3. Zaloguj się do bazy danych mysql jako ROOT

    mysql -u root mysql

  4. Wpisz następujące polecenie, zastępując MojePASWORD nowym hasłem

    UPDATE user SET Password=PASSWORD('MyPASSWORD') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;

To powinno wystarczyć, aby ponownie zalogować się do usługi Mysql jako root. Mam nadzieję, że to pomoże.

Luis Alvarado
źródło
Dziękuję za szybką informację zwrotną. /etc/mysql/my.cnfW moim przypadku jest plik my.cnf . Czy to poprawna lokalizacja? dmesgdaje mi wiele możliwości, których nie rozumiem: / Rzeczywiście zainstalowałem 5.1 - czy to ma jakieś konsekwencje?
radek
1
Nie martw się o lokalizację, jeśli znajdziesz plik. Pozwól, że zaktualizuję odpowiedź, aby lepiej przyjrzeć się wynikowi mysql w dmesg.
Luis Alvarado
4

Miałem ten sam problem po przeprowadzeniu aktualizacji do Ubuntu Server 12.04 LTS

sudo apt-get install mysql-server 

wystarczyło to naprawić, chociaż narzekało na starą bazę danych spotweb. Naprawiłem to, usuwając spotweb:

sudo apt-get purge spotweb

i rekonfiguracja mysql:

sudo dpkg-reconfigure mysql-server-5.5
RedPixel
źródło
4

Dodam ten przypadek, gdy ktoś napotyka podobne problemy. Próbowałem odinstalować i ponownie zainstalować bezskutecznie. Kluczem do znalezienia rozwiązania było to, że upstart umieszcza dzienniki błędów w tym folderze

/ var / log / upstart /

dla mysql

/var/log/upstart/mysql.log

kiedy otworzyłem, miałem tę wiadomość

Błąd analizatora składni AppArmor dla /etc/apparmor.d/usr.sbin.mysqld w /etc/apparmor.d/tunables/global w linii 15: Nie można otworzyć „tunables / home”

Kiedy szukałem w folderze /etc/apparmor.d/tunables/ , brakowało w nim pliku domowego, więc utworzyłem jeden

gedit /etc/apparmor.d/tunables/home i skopiował zawartość z innego komputera, który miał te nieskomentowane wiersze

@ {HOME} = @ {HOMEDIRS} / * / / root /

@ {HOMEDIRS} = / home /

ktoś ma tutaj podobny problem

https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/982303

potem mogłem zrestartować usługę

pt123
źródło
2

W moim przypadku było to o wiele łatwiejsze niż niektóre odpowiedzi tutaj. Znalazłem powiązany błąd na starterze, a poprawka była taka, jak wspomniano w komentarzu 9:

sudo touch /etc/apparmor.d/local/usr.sbin.mysqld
sudo service apparmor restart
Manfred Moser
źródło
1

Po aktualizacji zauważyłem, że mysql-server / mysql-server-5.5 nie został zainstalowany i żaden 5.1. Zmieniłem nazwę my.cnf na my.cnf_old i próbowałem zainstalować mysql-serven. Podczas instalacji pojawił się komunikat o błędzie, że nie można ustawić hasła roota. Następnie sprawdziłem moje konfiguracje, apparmor i tak dalej. Wszystko wydawało się w porządku. Moja kolejna próba polegała na ponownej konfiguracji serwera mysql, ale narzekałem, że pakiet nie został całkowicie zainstalowany. Więc postanowiłem odinstalować i podczas tego apt-get naprawiłem pakiet i teraz działa. Nie wiem dlaczego, bo nic nie zmieniłem.

użytkownik54914
źródło
1

Miałem podobne problemy, ale szybko wytropiono mnie w kłopoty, które, jak pamiętam, dawały mi ten problem wcześniej.

Jeśli wprowadzisz zmiany w tych ustawieniach, a system używa apparmor, może być również konieczne dostosowanie /etc/apparmor.d/usr.sbin.mysqld. Na przykład. te linie zostały dodane (aby umożliwić dowiązanie symboliczne do my.cnf i prawdopodobnie umożliwić odczytanie pliku dowiązania symbolicznego):

/ usr / sbin / mysqld {... /etc/mysql/*.cnf lr, /path/to/symlinked/my.cnf r, ...}

Simon Nuttall
źródło
1

W moim przypadku próbowałem zainstalować MySQL na nowej instalacji Ubuntu 12.04, ale nie rozumiałem, dlaczego wystąpił błąd podczas ustawiania hasła dla użytkownika root. Wypróbowałem wszystkie powyższe rozwiązania, ale nic nie mogłem zrobić.

Potem zdecydowałem się wyczyścić / usunąć wszystko, odinstalowałem serwer MySQL i usunąłem wszystkie jego foldery (/ etc / mysql / i / var / lib / mysql /), ostatecznie dzięki pewnej losowości nie dał żadnego błędu podczas ponowna instalacja i udało mi się ustawić hasło i uruchomić instancję serwera.

Alexian
źródło
0

W terminalu możesz zainstalować go ponownie i uruchomić mój.cnf możesz wpisać:

sudo apt-get install mysql-server-5.1
sudo apt-get --reconfigure mysql-server-5.1
sudo apt-get update
sudo start mysql my.cnf

to może działać w ten sposób.

Michael
źródło
0

Mam problem, że dodanie performance_schemazgodnie [mysqld]z /etc/mysql/my.confprzyczyn tego niepowodzenia. Usunięto tę linię i mysql mógł zacząć od nowa.

Edycja: Okazuje się Jeden gigabajt pamięci RAM to po prostu za mało, aby uruchomić mysqld z włączoną opcją performance_schema. Wpadłem na 3 koncerty i działało dobrze.

ThorSummoner
źródło