sviluppo-web-qa.it

Impossibile avviare / interrompere il servizio mysql

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?

EDIT UPDATE 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.

28
Derek Organ
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 fa dpkg --list mysql\* dire?

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

EDIT:

Così mysqladmin shutdown lavorato?

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? In esecuzione debsums mysql-server-5.0 potrebbe dirti di più. dpkg --listfiles mysql-server-5.0 potrebbe aiutare anche ...

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

25
freiheit

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 tu non abbia anche eseguito il backup di quel file, probabilmente non sai nemmeno quale sia quella password!

Reimpostazione della password di root 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

Suggerimento veloce

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. N.B. Proteggi questo account utente proprio come il root.

22
Jamieson Becker

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).

6
elcuco
pkill mysql

funzionerà sicuramente

5
Jonathan

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.

2
kashani

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.

2
theotherreceive

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

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

La soluzione è correggere il percorso del socket 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: in /etc/init.d/mysql quando 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 a /etc/mysql/debian.cnf e ho scoperto che era il socket errato.

1
Yvan

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

Consiglio 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 di lunga durata davvero o qualcosa del genere e quindi non è disposto a uscire con grazia abbastanza ancora.

1
nixgeek

Potresti tecnicamente terminarlo con:

pkill -9 mysqld

Ma potresti perdere dati?

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

1
John Kurlak

utilizzare il seguente comando:

$ mysqladmin shutdown

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

0
Masood Syed

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 fare uno dei

  • 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)
0
benlumley