Systemd MySQL nie chce się zatrzymać

17

Po aktualizacji do 15.04 miałem dużo zabawy z poznaniem systemd. Wydaje mi się, że wszystko działa, ale nie jestem w stanie zatrzymać mysql.service; polecenie systemctl po prostu się zawiesza, a mysql nadal działa. Czy ktoś jeszcze tego doświadczył lub może wiedzieć, co się dzieje?

Craig Dunford
źródło
2
Domyślnie uruchamia usługę za pomocą SIGKILL po 3 minutach (jeśli usługa nie zakończy się normalnie). Prawdopodobnie będziesz musiał przeczytać konfiguracje mysql.service.
Velkan
2
Którą wersję MySQL używasz? Użyłeś ich natywnego mysql.serviceskryptu, czy też stworzyłeś własny?
Jos
Jest to 5.6, które pochodzi z oficjalnego żywego repozytorium. Korzystam ze skryptu dostarczonego z tym pakietem.
Craig Dunford
Mieliśmy ten sam problem i zgłosiliśmy raport o błędzie .
Zespół EOLE

Odpowiedzi:

25

Miałem ten sam problem (aktualizacja do 15.04, przy użyciu oficjalnych plików i konfiguracji).

Musiałem wprowadzić następujące zmiany, aby móc mysqlręcznie zatrzymać demona sytemctli automatycznie ponownie uruchomić / zamknąć system:

  1. Uczynić /etc/mysql/debian.cnfczytelny dla mysqlużytkownika z

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Podaj nieco zmodyfikowany mysql.serviceplik:

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Podaj jawne polecenie zatrzymania, otwierając skopiowany plik w edytorze:

    sudo nano /etc/systemd/system/mysql.service
    

    i dodając następujący wiersz w [Service]sekcji:

    ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
    

    W Nano użyj Ctrl + O, aby zapisać (sposób Linux!), Ctrl + X, aby wyjść.

  4. Powiadom system o nowym pliku usługi:

    sudo systemctl daemon-reload
    
Udo
źródło
Mój Kubuntu zaczął się zawieszać podczas zamykania za pomocą zadania zatrzymania dla MySQL Community Server [1min 16s / 10min] . Ta odpowiedź rozwiązała problem, dziękuję bardzo.
Lolmaus - Andrey Mikhaylov
Ten sam problem spowodował moją aktualizację 14.10 -> 15.04 (która przeniosła MySQL 5.5 do 5.6). Chociaż MySQL „działa”, nie zamyka się poprawnie, więc Ubuntu zawiesza się przy zamykaniu. Wygląda na to, że problem dotyczy zmiany wersji MySQL w połączeniu z systemowym zastępowaniem aktualizacji. Ten link obejmuje niektóre aktualizacje konfiguracji MySQL w celu uporządkowania ostrzeżeń itp. Uruchomienie MySQL zawsze skarży się na nieprawidłowe zamknięcie, ponieważ systemd po prostu zabija proces po 10 minutach, jeśli możesz poczekać tak długo.
Mike
1
Ten sam problem w Debian Jessie / Testing z MySQL 5.6 - naprawiony dzięki Tobie :)
Majenko,
Nienawidzę tego robić, ale cieszę się, że to działa, dzięki Udo!
Gabriel Baker,
Nie rozwiązało to problemu w LinuxMint 18.
sivaprasadreddy.k
1

Miałem ten sam problem z Ubuntu 15.10 Desktop i znalazłem sposób, aby go naprawić:

parametr log_error w /etc/mysql/mysql.conf.d/mysqld.cnf został skomentowany. Po odkomentowaniu parametru systemd wykonuje mysqld zamknięcie bez problemów.

mikko356
źródło
Miałem ten sam problem na Ubuntu LTS 16.04. Działało tylko wyłączenie pliku error.log. Teraz mysqld pisze --log-syslogdo dziennika za pomocą opcji. Może powód: głównym systemem plików był btrfs.
ingopingo
1

Twój problem to rozmiar_wątku_wysoka. Jeśli jest znacznie wyższa niż liczba rdzeni / wątków, nie będziesz w stanie poprawnie zamknąć systemu, chyba że użyjesz polecenia mysqladmin shutdown.

Np .: Masz 2 rdzenie CPU z 4 wątkami. Jeśli ustawisz 1-4 - będzie działać dobrze. Jeśli ustawisz go na 16, zgodnie z zaleceniami wielu blogów o „wysokiej wydajności”, zostanie on poocięty.

Drakula963
źródło
1

Miałem podobny problem z tym, że mysql / mariadb nie przestał działać , gdy systemd polecił to podczas zamykania lub wywołania ręcznego sudo service mysql stop.

W moim przypadku uruchamiam system Ubuntu / Windows z podwójnym uruchomieniem w trybie UEFI, a te systemy operacyjne interpretują inny czas sprzętowy, więc oba systemy synchronizują się z internetowymi serwerami czasu podczas uruchamiania.

MySQL (i Mariadb) nie przestał działać, jeśli czas sprzętu zmienił się podczas jego działania.

Musisz odłożyć uruchomienie MySQL na czas po synchronizacji czasu. Najlepiej byłoby to zrobić, wstawiając tymczasową zależność od mysql, After: time-syncale to nie działało dla mnie.

Rozwiązanie, które zadziałało dla mnie (mysql można zastąpić mariadb dla tego samego efektu):

  1. Wyłącz mysql przy pomocy sudo systemctl disabled mysql.service

  2. Utwórz skrypt (upewnij się, że jest wykonywalny), który po pewnym czasie uruchomi mysql /usr/bin/delay_mysqlz zawartością:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Utwórz usługę systemową, aby uruchomić nowy skrypt /etc/systemd/system/delay_mysql.service z zawartością:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Zarejestruj swoją nową usługę za pomocą sudo systemctl enable delay_mysql.service

Spowoduje to, że twój skrypt będzie działał na poziomach wielu użytkowników, które na Ubuntu wynoszą 3,4,5.

dzień zero
źródło
To rozwiązało mój problem. Jednak bardzo ważne jest, aby pamiętać, że przed ponowną instalacją MySql powinieneś wyłączyć delay_mysql.service, w przeciwnym razie wystąpi błąd.
SiGe,
0

Tylko podczas kopiowania mysql.servicemusisz zrobić chmodpóźniej.

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service
Jaskółka oknówka
źródło
0

w moim przypadku było to niedopasowanie hasła dla użytkownika konserwacji debian-sys-maintmiędzy jednym w /etc/mysql/debian.cnfjednym a jednym w bazie danych MySQL.

Ten użytkownik jest używany do zamykania MySQL i innych funkcji. Po aktualizacji MySQL może się zdarzyć, że istnieje niezgodność przekazywania między plikiem a bazą danych. Może się to również zdarzyć, jeśli przeniesiesz bazę danych z jednego MySQL do drugiego. Jeśli zaimportujesz wszystkie bazy danych i użytkowników z innego MySQL na innym komputerze, musisz ponownie zsynchronizować debian-sys-mainthasło użytkownika konserwacji ( ).

Musisz: sprawdzić aktualne hasło w pliku ubuntu / debian:

sudo cat /etc/mysql/debian.cnf

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Możesz zobaczyć swoje hasło, którego system będzie używał tutaj: password = n4aSHUP04s1J32X5

Następnym krokiem jest aktualizacja MySQL do tego samego hasła: Zaloguj się do MySQL:

~$ mysql -u root -p

Wpisz hasło, aby uzyskać dostęp do MySQL

mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**

Po tym nie ma już problemów z zamykaniem, nie trzeba czekać 10 minut, nie ma problemów z instalowaniem aplikacji korzystających z tego konta serwisowego, takich jak phpmyadmin.

AKTUALIZACJA: Więc niestety to nie rozwiązało problemu. Sprawiło, że było to trochę losowe - czasami mogę zatrzymać usługę bez problemu, innym razem zawiesi się po zatrzymaniu usługi.

Patryk
źródło