Systemd Mysql non si fermerà


17

Dopo l'aggiornamento a 15.04, mi sono divertito molto a conoscere systemd. Penso di avere tutto funzionante tranne che non sono in grado di fermare mysql.service; il comando systemctl si blocca e mysql continua a funzionare. Qualcun altro ha sperimentato questo o potrebbe sapere cosa sta succedendo?


2
Per impostazione predefinita, annulla il servizio con SIGKILL dopo 3 minuti (se il servizio non si interrompe normalmente). Probabilmente dovrai leggere le configurazioni di mysql.service.
Velkan,

2
Quale versione di MySQL stai utilizzando? Hai usato il loro mysql.servicescript nativo o ne hai creato uno tuo?
Jos

È 5.6 che esce dal vivido repo ufficiale. Sto usando lo script fornito con quel pacchetto.
Craig Dunford,

Abbiamo avuto lo stesso problema e abbiamo presentato una segnalazione di bug .
Squadra EOLE

Risposte:


25

Ho avuto lo stesso problema (aggiornamento a 15.04, usando file ufficiali e config).

Ho dovuto apportare le seguenti modifiche per poter arrestare il mysqldemone manualmente con sytemctle automaticamente al riavvio / spegnimento del sistema:

  1. Rendi /etc/mysql/debian.cnfleggibile per l' mysqlutente con

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Fornire un mysql.servicefile leggermente modificato :

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Fornire un comando di arresto esplicito aprendo il file copiato in un editor:

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

    e aggiungendo la seguente riga nella [Service]sezione:

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

    In Nano, usa Ctrl + O per salvare (in modo Linux!), Ctrl + X per uscire.

  4. Rendi noto il nuovo file di servizio al sistema:

    sudo systemctl daemon-reload
    

Il mio Kubuntu ha iniziato a bloccarsi durante l'arresto con Un processo di arresto in esecuzione per MySQL Community Server [1min 16s / 10min] . Questa risposta ha risolto il problema, grazie mille.
lolmaus - Andrey Mikhaylov,

Il mio aggiornamento 14.10 -> 15.04 (che ha spostato MySQL 5.5 a 5.6) ha causato lo stesso problema. Sebbene MySQL 'funzioni' non si spegne correttamente, quindi Ubuntu si blocca allo spegnimento. Sembra che il problema si riferisca alla modifica della versione di MySQL combinata con systemd che sostituisce upstart. Questo link copre alcuni degli aggiornamenti della configurazione di MySQL per risolvere gli avvisi, ecc. L'avvio di MySQL si lamenta sempre anche di uno spegnimento errato, poiché systemd uccide il processo dopo 10 minuti, se puoi aspettare così a lungo.
Mike

1
Stesso problema in Debian Jessie / Testing con MySQL 5.6 - risolto grazie a te :)
Majenko

Odio doverlo fare, ma sono così felice che funzioni, grazie Udo!
Gabriel Baker,

Non ha risolto il problema su LinuxMint 18.
sivaprasadreddy.k

1

Ho avuto lo stesso problema con Ubuntu 15.10 Desktop e ho trovato il modo di risolverlo:

Il parametro log_error in /etc/mysql/mysql.conf.d/mysqld.cnf è stato commentato. Dopo aver decommentato il parametro, systemd esegue l'arresto mysqld senza problemi.


Ho avuto lo stesso problema su Ubuntu LTS 16.04. Funzionava solo la disabilitazione di error.log. Ora mysqld scrive tramite l' --log-syslogopzione sul diario. Forse un motivo: il filesystem di root era btrfs.
ingopingo,

1

Il tuo problema è thread_pool_size. Se è molto più alto del numero di core / thread, non sarai in grado di arrestare correttamente se non usando il comando mysqladmin shutdown.

Ad esempio: hai 2 core CPU con 4 thread. Se lo imposti da 1 a 4, funzionerà bene. Se lo imposti su 16, come consigliato in molti blog "ad alte prestazioni", verrà sbalzato.


1

Ho avuto un problema simile con mysql / mariadb che non riusciva a fermarsi quando richiesto da systemd , allo spegnimento o chiamato manualmente con sudo service mysql stop.

Nel mio caso sto eseguendo il doppio avvio di Ubuntu / Windows in modalità UEFI e questi sistemi operativi interpretano tempi hardware diversi, quindi entrambi i sistemi operativi si sincronizzano con i server del tempo Internet quando si avviano.

MySQL (e Mariadb) non si arrestava se l'ora hardware è cambiata mentre era in esecuzione.

È necessario posticipare l'avvio di MySQL fino al termine della sincronizzazione. Idealmente, ciò dovrebbe essere fatto inserendo una dipendenza temporale da mysql After: time-syncma ciò non ha funzionato per me.

La soluzione che ha funzionato per me (puoi sostituire mysql con mariadb per lo stesso effetto):

  1. Disabilita mysql con sudo systemctl disabled mysql.service

  2. Crea uno script (assicurati che sia eseguibile) che avvierà mysql dopo alcuni ritardi /usr/bin/delay_mysqlcon i contenuti:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Crea un servizio systemd per eseguire il tuo nuovo script /etc/systemd/system/delay_mysql.service con contenuti:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Registra il tuo nuovo servizio con sudo systemctl enable delay_mysql.service

Questo farà girare lo script a livelli multiutente, che su Ubuntu sono 3,4,5.


Ha risolto il mio problema. Tuttavia è molto importante notare che prima di reinstallare MySql è necessario disabilitare delay_mysql.service, altrimenti si è verificato un errore.
SiGe

0

Proprio durante la copia mysql.servicedovrai fare un chmoddopo.

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service

0

nel mio caso si trattava di una mancata corrispondenza della password per l'utente della manutenzione debian-sys-mainttra uno /etc/mysql/debian.cnfe uno nel database MySQL.

Questo utente viene utilizzato per l'arresto di MySQL e altre funzioni. Dopo l'aggiornamento di MySQL potrebbe accadere che non ci sia una corrispondenza errata tra file e database. Ciò può accadere anche se si sposta il database da un MySQL a un altro. Se importerai tutti i database e gli utenti da altri MySQL su macchine diverse, dovrai risincronizzare la debian-sys-maintpassword dell'utente di manutenzione ( ).

Devi fare: controlla la tua password attuale nel file 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

Puoi vedere la tua password che il sistema utilizzerà qui: password = n4aSHUP04s1J32X5

Il prossimo passo è aggiornare MySQL alla stessa password: Accedi a MySQL:

~$ mysql -u root -p

Digita la password per accedere a MySQL

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

Dopodiché non più problemi con l'arresto, nessuna attesa di 10 minuti, nessun problema con l'installazione di app che utilizzano questo account di manutenzione come phpmyadmin.

AGGIORNAMENTO: Sfortunatamente questo non ha risolto il problema. Lo ha reso un po 'casuale - a volte posso interrompere il servizio senza problemi un'altra volta che si bloccherà all'arresto del servizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.