27août 2009

myisamchk error Not enough memory for blob

mysql_logo.gif
Une nouvelle erreur apparu sur une table corrompu suite à un crash Mysql pour manque de RAM (Out of memory).

Tout d'abord un petit rappel sur la façon qu'utilise le moteur MyISAM pour la gestion des tables :

  1. wordpress_postmeta.MYD - la table où tous les enregistrements sont stockés.
  2. wordpress_postmeta.MYI - l'index pour les tables.
  3. wordpress_postmeta.frm - le schéma de la table.


Voici l' erreur rencontrée lors de la réparation de la table :

srv1234 ~ # myisamchk -r /var/lib/mysql/wordpress/wordpress_postmeta.MYI
 
- recovering (with sort) MyISAM-table '/var/lib/mysql/wordpress/wordpress_postmeta.MYI'
Data records: 31769
- Fixing index 1
Wrong block with wrong total length starting at 94358749
myisamchk: error: Not enough memory for blob at 94358800
MyISAM-table '/var/lib/mysql/wordpress/wordpress_postmeta.MYI' is not fixed because of errors

Cela se produit parce que l'entrée de l'index invalide indique que la taille d'un champ BLOB est plus grande que celle spécifié entre parenthèse. La correction a été assez simple, il suffit d'ajouter l'option --max-record-length=0.

srv1234 ~ # myisamchk --max-record-length=0 -r /var/lib/mysql/wordpress/wordpress_postmeta.MYI

Dans le cas présent la valeur --max-record-length=0 permet de ne définir aucune limitation sur la taille du champ BLOB.