MySQL continua a bloccarsi: InnoDB: impossibile bloccare ./ibdata1, errore: 11


43

Ho un server web semplice (Debian 6.0 x86, DirectAdmin con 1 GB di memoria e ancora 10 GB di spazio libero, versione mySQl 5.5.9), tuttavia il server mySQL continua a bloccarsi e devo interrompere tutti i processi mySQL per poterlo riavviare ancora.

/var/log/mysql-error.log produzione:

130210 21:04:26 InnoDB: Using Linux native AIO
130210 21:04:34 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:05:42 InnoDB: Completed initialization of buffer pool
130210 21:05:48 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:22 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:27 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:06:29 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:07:22 InnoDB: Completed initialization of buffer pool
130210 21:07:51 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:08:33 InnoDB: Completed initialization of buffer pool
130210 21:12:03 [Note] Plugin 'FEDERATED' is disabled.
130210 21:12:47 InnoDB: The InnoDB memory heap is disabled
130210 21:12:47 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
130210 21:12:47 InnoDB: Compressed tables use zlib 1.2.3
130210 21:12:47 InnoDB: Using Linux native AIO
130210 21:13:11 InnoDB: highest supported file format is Barracuda.
130210 21:13:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130210 21:14:05  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130210 21:17:53  InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
130210 21:17:53  InnoDB: Operating system error number 11 in a file operation.

Ho trovato un argomento sul sito Web mySQL qui, tuttavia non esiste una soluzione.

Qualche idea qualcuno?


E quale versione di MySQL è questa?
Michael Hampton

Non capisco: questa parte del file di registro parla del problema con l'avvio di MySQL e non della causa dell'errore. La cosa migliore è rimuovere l'origine del problema.
Krzysztof Księżyk,

@MichaelHampton Il post è stato modificato (mySQL versione 5.5.9 e aumentato il registro).
Devator,

1
Hai verificato che non esistesse mysqld in esecuzione prima di avviarlo? Come?
symcbean,

Risposte:


32

un altro approccio da un commento nello stesso blog:

questo mi ha aiutato:

lsof -i: 3306

Quindi uccidilo (il numero di processo)

uccidi -9 PROCESSO

es. uccidere -9 13498

Quindi prova a riavviare nuovamente MySQL.

tramite http://www.webhostingtalk.com/archive/index.php/t-1070293.html


1
service mysql restartnon mostrava già alcun processo in esecuzione, ma l' lsofho trovato. L'ho ucciso service mysql start, e ora il flusso di e-mail fallite del processo può fermarsi. Grazie molto.
Doyle Lewis,

28

con Ubuntu 14.04. Sto riscontrando questo problema quando provo a riavviare tramite

/etc/init.d/mysql restart

Invece prova

service mysql restart 

1
Grazie, mi ha aiutato. Ma perché?
troppo il


@too, se hai uno script init.d vecchio stile e una configurazione upstart per un lavoro, devi usarlo service job start, altrimenti se lo avvii con lo script init.d, Upstart non lo saprà e potrebbe tentare per avviare un'altra istanza. (Almeno questo è il caso degli script init predefiniti di MySQL.)
wireman

@wireman: questo spiega perché altri pacchetti, incluso il nodo (server DNS), hanno problemi simili. Quando hanno deciso di applicarlo? Penso che /etc/init.d sia superiore in quanto consente il completamento della shell, quindi allevia l'utente da una digitazione eccessiva. Progresso alla potenza di -1 :)
troppo

Il completamento della scheda @too Bash è personalizzabile. Ubuntu non ha nulla a portata di mano, ma sembra strano che nessuno avrebbe pensato di completare i servicenomi delle schede . Forse inviare una richiesta di funzione a Canonical tramite il loro bug tracker?
un CVn

18

La causa più comune di questo problema sta provando ad avviare MySQL quando è già in esecuzione.

Per risolverlo, uccidi tutte le istanze in esecuzione di MySQL e quindi riavvialo usando i tuoi normali script di avvio, ad es service mysql start.

Non tentare di avviare MySQL manualmente quando si utilizzano versioni distribuite in pacchetti a meno che non si sia preparati per un mondo di dolore.


however the mySQL server keeps crashing- Non riavvio mySQL. Si blocca da solo, dopodiché devo riavviarlo ovviamente. ;-)
Devator,

@MichaelHampton puoi dare qualche informazione in più su "world of hurt" e "avviare MySQL manualmente"? Grazie)
Serge Kvashnin il

11

Soluzione

fare una copia dei file originali (ibdata1, ib_logfile0, ib_logfile1 ...).

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

http://cglreport.zhenhua.info/2008/08/mysql-error-unable-to-lock-ibdata1.html


magicamente mi ha aiutato.
nils petersohn,

qual è il punto di cp -a?, ho già letto la pagina man
Ilja,

2
Mille grazie, mi ha aiutato. Ma perché?
DaviAragao,

Ho avuto questo problema dopo un riavvio non riuscito su un db in esecuzione in un contenitore finestra mobile. Sto facendo un'ipotesi plausibile sul perché questo funzioni ed è che alcuni metadati sono memorizzati nel file. spostandolo e copiandolo nella sua posizione originale si rimuovono i metadati determinando che è bloccato. l'operazione -a mantiene gli attributi del file, inclusi gli attributi relativi a SELinux, ma non i metadati, durante la copia.
JDL

2

Questo mi ha aiutato a risolverlo:

Elimina tutti i file ibdata e lascia che mysql li crei.

basta mysql:

service mysql stop

vai alla libreria mysql:

cd /var/lib/mysql/

sposta i file innodb da qualche parte nel caso ne avessi bisogno:

mv ib* /root/

avvia mysql:

service mysql start

Scorrendo le risposte utili, ho sicuramente pensato che funzionasse poiché l'errore si lamenta di non essere in grado di bloccare quel file. Dopo essersi mosso, mysql li ha ricreati, ma si lamenta ancora ... pazzo!
Kyle Burkett,

1

È venuto qui da google dello stesso errore ripetuto ma con il codice di errore 13 ( InnoDB: Unable to lock ./ibdata1, error: 13). Dopo aver provato molte soluzioni su Internet, ne ho inventata una che mi ha aiutato (apparmor!)

Aggiungi queste righe alla configurazione /etc/apparmor.d/usr.sbin.mysqld(e ricarica naturalmente apparmor e mysql):

/path/to/mysql/data/ r,
/path/to/mysql/data/** rwk,

Le principali differenze tra le soluzioni spesso: due regole (per dir stesso e per tutti i file all'interno, notare il doppio **) e l' kopzione per consentire a mysql di bloccare i file.

Spero che questo aiuti qualcuno.


Puoi anche aggiungerlo a /etc/apparmor.d/local/usr.sbin.mysqld. Crea il file se non esiste. Per maggiori dettagli, vedere/etc/apparmor.d/local/README
knb


0

Verifica di avere i pid-fileparametri nella [mysql]sezione del my.cnffile. Se non è presente, unable to lock ...ibdata1.. error:1accadrà.


0

Semplice, ma più veloce di "cp -a". E ha aiutato quando "cp -a" e tutto il resto no.

  1. service mysql stop && pkill -f mysql

Sbarazzati di tutti i processi mysql

  1. vi /etc/mysql/my.cnf

Cambia il parametro datadir = / var / lib / mysql in datadir = / var / lib / mysql2 (o aggiungi se non hai)

  1. mv /var/lib/mysql /var/lib/mysql2

Rinomina datadir con un nuovo nome

  1. service mysql start

Prepara il tuo tamburello


0

Se nessuna delle altre soluzioni funziona, il problema probabilmente deriva da un'errata configurazione di AppArmor.

Quindi fai solo:

$ apt install apparmor-profiles

e quindi riavvia MySQL (nota quanto velocemente si riavvierà).

Ho notato che mancava un file relativo ad AppArmor quando facevo:

$ systemctl status mysql.service

Ecco perché ho pensato che qualcosa non andasse nella configurazione di AppArmor.

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.