Corruptions de tables InnoDB

7 réponses
AuteurMessage

mirage |
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 12/04/2009 à 20:19

Salut,

Cet après-midi, une de nos machines OVH est tombée. Le support est intervenu et a changé la carte mère après avoir diagnostiqué une carte réseau HS (ça m'étonne mais admettons).

J'ai repris la main suite au reboot avec plein de problèmes : load average très haut, ssh quasiment inutilisable, etc. Le serveur est ensuite retombé. Impossible de reprendre la main et le support OVH avait déjà diagnostiqué que la machine était HS (je n'ai donc pas demandé un hard reboot pour éviter de court-circuiter le travail du tech). La main m'est rendue, la machine revient sans que le technicien n'arrive à diagnostiquer ce qui c'était produit, juste qu'un reboot avait suffit à relancer la machine.

Bref, entre temps, je vois que mySQL n'a pas démarré et qu'il refuse de le faire. Je vois dans le syslog que des tables InnoDB sont corrompues, ce qui empêche mySQL de démarrer.

Dans l'urgence et ne trouvant rien sur le net qui puisse m'aider (j'ai trouvé innodb_force_recovery dans la doc mais ça n'a rien changé), j'ai décidé de restaurer une sauvegarde de cette nuit, histoire de pouvoir relancer les sites au plus vite, même si la journée était perdue.

Avez-vous déjà eu ce genre de problème ? A priori ça viendrait du fait de l'arrêt brutal de la machine qui aurait corrompu les tables pendant l'écriture. Y a-t-il une solution dans ce cas pour reconstruire les tables sans tout perdre ?

Comment s'en prémunir ? Revenir sur du MyISAM à la place d'InnoDB ?

nayluge | Cyril
Membre

 

Inscrit le : 09/01/2008

# Le 12/04/2009 à 20:32

A prendre avec des pincettes :

De ce que l'on m'a dit, innodb ne permet pas de faire de REPAIR ... donc si une table crash elle est "foutue". Voilà pourquoi il faut préférer MYISAM à INNODB.

Après c'est un "on m'a dit" donc a vérifier

caaptusss | Jérémy
Membre

Photo de caaptusss

Inscrit le : 25/09/2007

# Le 12/04/2009 à 20:33

J'ai déjà eu le cas sur mon serveur mail.

InnoDB, je le déconseille de plus en plus à cause de ces conneries de corruption.
Ceci étant, quand j'ai eu le plantage, je n'ai pas réussit à faire repartir la base. Il faut donc faire un démarrage forcé en recovery de type 1 et il faut tenter de l'exporter. Si ça ne passe pas, il faut comprendre quel est le type de la corruption dans les logs et prendre le type de recovery correct.

Personnellement, j'ai jamais réussit à exporter la base, tu moins, pas complètement, j'ai eu une grosse partie supprimée, j'ai donc préféré repartir sur un backup.

Plus d'infos ici : http://dev.mysql.com/doc/refman/5.0/fr/forcing-rec...Ouvrir dans une nouvelle fenetre

FirstHeberg.comOuvrir dans une nouvelle fenetre

mirage | Vincent
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 12/04/2009 à 20:58

Le principal avantage d'InnoDB est la gestion des clés étrangères, c'est ce qui fait que je l'ai préféré à MyISAM pour la nouvelle version d'AeroWeb. Le soucis c'est que la table fait 100 mo et qu'il y a beaucoup de contraintes de clés étrangères donc, forcément, en cas d'arrêt sauvage, ça fout le bordel. Repasser sous MyISAM me dérange donc pour les suppressions en cascade.

@caaptusss : je suis tombé sur ce point de la doc et je n'ai pas réussi non plus à relancer MySQL.

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 13/04/2009 à 01:16

C'est bizarre, on utilise intensivvement innoDB pour les fonctionnalites transactionnelles, et meme apres differents crash, le recovery a toujours fonctionne quant il s'est avere necessaire.

Par contre, mysql n'explique pas forcement qu'il est en train de reparer, le demarrage a l'air de ne pas fonctionner, mais en fait il repare la base grace au journal, mais aucun message ne le dit, il faut ouvrir les logs pour se rendre compte qu'il est en train de travailler. En general ca prend pas mal de temps, car il va "defaire" toutes les transactions qui ne se sont pas finie correctement pour retrouver un etat coherent de la base, ca peut prendre quelques heures. C'est pour ca aussi que le load peut etre tres eleve, car ca utilse intensivement le disque.

A mon avis, c'est pas moins stable, ni moins reparable que MyIsam, c'est juste que c'est pas ergonomique ni bavard du tout, ce qui fait que c'est difficile de bien comprendre ce qu'il se passe exactement.

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 13/04/2009 à 19:22

Je serais plutôt de l'avis de Mathieu/Telaxo, je trouve même InnoDB plus stable que MyISAM. Il me semble d'ailleurs que les corruptions sont en théorie impossibles en InnoDB, et elles relèvent alors plutôt d'un bug applicatif, alors qu'en MyISAM les corruptions d'index ou de données sont quasi obligatoires après une coupure électrique.

Quand la machine est du genre à cracher régulièrement (pour X raisons), j'ai tendance à conseiller de l'InnoDB.

Maintenant le problème c'est qu'il y a d'autres "couches" qui interviennent plus ou moins bien : le système de fichier (ext3/4, xfs, etc), LVM, l'OS lui même, la carte raid, ou encore le cache physique du disque. Pour ma part la seule vraie corruption de données InnoDB que j'ai rencontrée était sur un ext4 (fraîchement sorti...) via une abstraction Xen, le tout sur du LVM. Mais là encore, en mode recovery j'ai pu dumper la base et la reconstruire.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

mirage | Vincent
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 13/04/2009 à 20:14

C'est un Kimsufi 2XL donc pas de Raid. Après, c'est possible qu'il y ait eu un soucis de disque mais il n'y a pas eu de fsck après la coupure.

Toujours est-il que je flippe un peu et je ne sais pas trop comment me prémunir de ce genre de bordels à l'avenir... (ça m'était jamais arrivé et je ne savais pas trop quoi faire).

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 13/04/2009 à 20:56

En theorie oui, InnoDB ne peut pas se "casser" si tous les elements dont il depend fonctionnent correctemen( disque, carte raid, etc..). Le principe est que le moteur n'ecrit sur disque QUE des versions coherentes de tes donnees, et log dans un journal les modifications entre chaque ecriture, ce qui fait que si ca foire pendant une ecriture, il est capable de retrouver le dernier etat coherent grace au journal.

Si ca foire 100 modifications apres une ecriture, il est capable de refaire les 100 transactions grace au journal, et donc tu perds pas non plus le travail fait depuis la derniere ecriture, a priori, tu ne perds vraiment qu'extremement peu de requetes.

Apres, en pratique il arrive toujours quelque chose qui fait que ca ne se passe pas exactement comme prevu, mais mon experience me fait dire que ca se passe quand meme vraiment bien.

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 5:30:05 | Généré en 5.76ms | Contacts | Mentions légales |