Impossibile avviare / interrompere il servizio mysql


28

Acquisizione di un server web Debian Etch con MySQL in esecuzione.

Di solito avvio, interrompo e riavvio msyql usando:

/etc/init.d/mysql restart

Per qualche motivo su questa configurazione ottengo quanto segue:

: ~ # /etc/init.d/mysql stop

Arresto del server di database MySQL: mysqld non è riuscito!

Il processo mysql funziona correttamente:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

Sono sicuro che ci sia un modo davvero semplice per farlo, ma voglio capire anche cosa sta succedendo. Perché il modo tipico non funziona per me?

MODIFICA AGGIORNAMENTO come aggiornamento:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

mysqladmin shutdown funziona ma sono ancora curioso di sapere perché i comandi /etc/init.d/mysql non funzionano.


Per me il problema era che l'installazione fatta a mano cercava /tmp/mysql.sockinvece di /var/run/mysqld/mysqld.sock. Quindi la sceneggiatura dei manutentori di Debian stava emettendo un errore, silenziosamente. Devi solo aggiustare socket=il/etc/mysql/debian.cnf
Yvan il

Risposte:


25
mysqladmin shutdown

dovrebbe funzionare per arrestare il server.

Vedo due probabili possibilità:

  1. MySQL ha un problema e si rifiuta di chiudere per qualche motivo.
  2. L'amministratore precedente ha fatto qualcosa di strano. O ha modificato lo script init.d o non si è preoccupato di usare i pacchetti Debian per installare MySQL.

Cosa dpkg --list mysql\*dice?

Cosa dice /var/log/mysql.err? O gli altri log mysql?

MODIFICARE:

Quindi ha mysqladmin shutdownfunzionato?

In base a ciò, il pacchetto mysql-server è installato (mysql-server-5.0; il pacchetto mysql-server è probabilmente solo uno stub). Quindi potrebbero averlo installato su di esso? Correre debsums mysql-server-5.0potrebbe dirti di più. dpkg --listfiles mysql-server-5.0potrebbe aiutare anche ...

Cosa c'è in realtà in /etc/init.d/mysql? Non ho controllato quella versione specifica del pacchetto, ma dovrebbe provare a usare mysqladmin shutdown... Forse sei fortunato e hanno solo rotto ...


salute, ha aggiunto alcune informazioni al post.
Derek Organ,

Sospetto che non abbiano usato i pacchetti Debian per installare mysql
Derek Organ il

qualcuno ha usato un pacchetto Debian almeno una volta. Potrebbero aver compilato dal sorgente e sovrascritto i file effettivi o averlo rotto in qualche altro modo ...
Freiheit,

22

Perché questo sta accadendo

Questo è un problema comune se si esegue un'importazione mysql e si sovrascrive il database mysql stesso, ad esempio quando si potrebbe ripristinare da un backup mysqldump -A.

Questa è una buona cosa: probabilmente vorrai eseguire il backup di tutti i tuoi utenti mysql, permessi, ecc., Ma può creare confusione con cose come l'utente debian-sys-maint usato per spegnere cleanly mysql.

Sebbene questo nuovo database cambierà sia la password di root sia la password di debian-sys-maint, ovviamente non cambierà automaticamente la password di debian-sys-maint prevista in /etc/mysql/debian.cnf. In effetti, a meno che non sia stato eseguito il backup di quel file, probabilmente non si sa nemmeno quale sia quella password!

Reimpostazione della password di root di mysql (opzionale)

Cominciando dall'inizio. Se la password di root di mysql era diversa tra server vecchi e nuovi, puoi usare mysqladmin per risolverlo:

mysql -p -u root password 'newpassword'

Tuttavia, quando apt-get ha installato mysql-server, probabilmente ti ha richiesto la nuova password di root mysql e probabilmente hai usato la stessa che stavi usando da prima.

Correggi la password di manutenzione di debian sys.

Quindi ora cerca la password di debian sys maint che debian ha creato per te quando l'hai installata sul nuovo server. (Hai bisogno di sudo perché questo dovrebbe essere un file altamente protetto.)

sudo cat /etc/mysql/debian.cnf

Ora accedi a mysql usando la password di root che hai impostato sopra:

mysql -p -u root   # use your new password when prompted

Reimposta la password per l'utente debian-sys-maint e non dimenticare di svuotare i privilegi:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

Prova per essere sicuro che funzioni:

sudo /etc/init.d/mysql restart

Consiglio rapido

Se hai mai bisogno di reimpostare la password di root per il server senza dover arrestare il server, questo account utente ha l'autorità per farlo - basta cat il file debian.cnf e accedere con quell'utente. NB Proteggi questo account utente proprio come il root.


2
Grazie, Jamieson, questo mi ha potenzialmente risparmiato ore di lavoro.
slhck,

1
Fantastico e assolutamente benvenuto! Ho dovuto ricadere su quel file più spesso di quanto vorrei ammettere;)
Jamieson Becker,

1
Risposta brillante. L'importazione di un dump del database (e con esso la password di root) era esattamente il motivo nel mio caso. L'unica differenza è che il mio file debian.cnf ha usato l'utente mysql "root" invece di "debian-sys-maint". Ho semplicemente inserito la password di root in debian.cnf e ora posso controllare mysql tramite "service mysql <command>".
Tomasz P. Szynalski,

6

Altri 2 suggerimenti:

sh -x /etc/init.d/mysql restart

Questo ti mostrerà i comandi eseguiti dallo script init.

installa il pacchetto debsums e puoi verificare quali pacchetti sono stati modificati (verifica che sia disponibile anche per RPM, ma IMHO funziona meglio).


1
Ho avuto lo stesso problema di OP e ho suggerito di eseguire questo comando "Access denied for user 'debian-sys-maint'@'localhost'", il che era assolutamente corretto: il mio database mysql non aveva ancora assegnato alcuna autorizzazione, quindi mysql stopnon aveva le autorizzazioni nel database stesso per chiudere. Un manuale ha mysqladmin shutdownfunzionato perfettamente.
jevon,

5
pkill mysql

funzionerà sicuramente


Questo è ciò che ho risolto la mia domanda "arresto del database mysql mysqld fallito". Dovresti ottenere un milione di punti!
Hans Wassink,

2

Supponendo che il pacchetto sia alquanto strano, il problema potrebbe essere il file pid. Sospetto che i nuovi pacchetti o l'installazione compilata non abbiano creato / var / run / mysql / o qualsiasi cosa sia standard su Debian per il file pid su cui scrivere o lo script init stia cercando il file mysqld.pid in un altro posto. Se riesci a correggere la mancata corrispondenza del file init / pid, le cose dovrebbero probabilmente funzionare.


Lo script init non utilizza il file pid per arrestare il server.
theotherreceive,

2

Lo script mysql shutdown usa l'utente debian-sys-maint per eseguire 'mysqladmin shutdown', leggendo la password dell'utente da /etc/mysql/debian.cnf. È necessario verificare che questo file esista e che sia possibile eseguire l'arresto di mysqladmin come questo utente.


1

Potresti tecnicamente terminarlo con:

pkill -9 mysqld

Ma potresti perdere dati?

Potrebbe essere meglio chiedere a qualcuno su http://www.serverfault.com


Sono consapevole di farlo in questo modo ma non definisco ciò che sto cercando di fare regolarmente.
Derek Organ,

1

L'uso di "pkill mysql" probabilmente perderà i tuoi dati, in particolare se invocato come "pkill -9" :(

Consiglierei anche di usare 'sh -x' per vedere quale potrebbe essere il problema con lo script init e puoi anche dare un'occhiata nei log degli errori per MySQL (/ var / log / mysql o / var / lib / mysql, a seconda della configurazione) per vedere se è bloccato su una query molto lunga o qualcosa del genere e quindi non è disposto a smettere con grazia abbastanza ancora.


1

Per seguire il commento alla tua domanda, scriverò una risposta completa:

Il problema è che il socket predefinito è /tmp/mysql.sockcon sorgente MySQL e /var/run/mysqld/mysqld.sockcon binari Debian.

La soluzione è quella di fissare il percorso presa in /etc/mysql/debian.cnf, fornendo il bene socket=. O mantenendolo, ma poi cambia quello in /etc/mysql/my.cnf.

Ecco come l'ho scoperto: /etc/init.d/mysqlquando c'è il messaggio «fallito», hai questa linea chiamata:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

Questo mi ha indicato $MYADMIN ping, che è mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. L'esecuzione di questo comando termina con:

/ usr / bin / mysqladmin: connessione al server su "localhost" non riuscita

errore: "Impossibile connettersi al server MySQL locale tramite socket" /var/run/mysqld/mysqld.sock "(2)"

Controlla che mysqld sia in esecuzione e che esista il socket: '/var/run/mysqld/mysqld.sock'!

Quindi ho dato un'occhiata /etc/mysql/debian.cnfe ho scoperto che era la cattiva presa.


0

utilizzare il seguente comando:

$ mysqladmin shutdown

questo dovrebbe essere disponibile nella directory / usr / bin nel tuo caso.


0

devi essere un super utente per iniziare a fermare mysql (e la maggior parte degli altri servizi) su debian.

Non sono sicuro se lo sei già o no ... in caso contrario, devi farlo

  • accedi come root
  • metti sudo prima del tuo comando /etc/init.d/mysql restart (ti chiederà la tua password e dovrai essere nel gruppo sudoers)
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.