Réparer l\’erreur MySQL : Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

\"MySQLJ\’ai sur mon serveur une tâche Cron qui met à jour mes flux RSS toutes les 15 minutes dans la base de données MySQL de RssLounge. Or, après une mise à jour de certains paquets de ma Ubuntu Server 10.04 (dont MySQL), plus moyen d\’accéder à la table dans laquelle sont stockés ces flux. Que ce soit depuis l\’application RssLounge ou depuis la ligne de commande, MySQL me renvoie l\’erreur suivante :

Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

Ceci est tout simplement dû au fait que des opérations d\’insertion sur cette table étaient en cours d\’exécution au moment où la procédure de mise à jour a arrêté le service MySQL. Le fichier contenant les enregistrements, ma_table.MYI, est donc corrompu. Il existe cependant une procédure de réparation assez simple grâce à l\’outil myisamchk présent avec l\’installation de MySQL. Comme vous l\’aurez compris, cette procédure n\’est valable que pour les tables de type MyISAM.

Dans un premier temps, nous allons couper les services d\’Apache et MySQL de façon à ne pas créer de nouveaux conflits durant la procédure de réparation.

$ sudo /etc/init.d/apache2 stop
$ sudo /etc/init.d/mysql stop

Nous allons ensuite vérifier que le fichier que nous souhaitons réparer contient bien des erreurs (en gros, qu\’on a bien choisi le fichier corrompu) :

$ sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4945   Deleted blocks:       0
myisamchk: warning: Table is marked as crashed and last repair failed
- check file-size
myisamchk: warning: Size of indexfile is: 602112        Should be: 53248
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
myisamchk: error: Found 4943 keys of 4945
- check record links
myisamchk: error: Record-count is not ok; is 4943         Should be: 4945
myisamchk: warning: Found 1870736 deleted space.   Should be 0
myisamchk: warning: Found        971 deleted blocks       Should be: 0
myisamchk: warning: Found       9665 key parts. Should be: 4943
MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\' is corrupted
Fix it using switch \"-r\" or \"-o\"

Maintenant que nous sommes sûr qu\’il s\’agit de ce fichier, nous allons tout simplement tenter la procédure de réparation. La première chose à essayer (qui a fonctionné pour moi) est l\’option \ »-r\ » ou \ »–recover\ ». Il s\’agit d\’une méthode de réparation efficace qui corrige à priori la majorité des problèmes de corruption dans une table. Dans le cas où cette méthode échouerai, l\’option \ »-o\ » ou \ »–safe-recover\ » peut être tentée. On a donc :

$ sudo myisamchk -r /var/lib/mysql/ma_base/ma_table.MYI
- recovering (with sort) MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\'
Data records: 4945
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
Data records: 4943

Et on vérifie :

sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Checking MyISAM file: /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4943   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4
- check data record references index: 5
- check data record references index: 6
- check record links

Enfin, on relance Apache et MySQL :

$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/apache2 start

Et si tout va bien, tout refonctionne comme si de rien n\’était!

Agrégateur de flux RSS : rssLounge

L\’un des intérêts à avoir son serveur personnel (ou même un hébergement chez un prestataire) c\’est qu\’on a alors un choix important d\’applications web open source pour tout type d\’utilisation et qu\’on peut ainsi se détacher des solutions propriétaires grand public avec lesquelles le contrôle de ses données personnelles est complexe pour ne pas dire impossible. Pour qui a quelques notions de base sur l\’administration d\’un serveur et sait suivre un tutoriel ou lire un README, il devient très facile de propulser un CMS, un blog ou encore un webmail.

Afin de poursuivre mon but de fuir Google, j\’ai souhaité remplacer l\’agrégateur de flux RSS Google Reader que j\’utilisais par une solution open source hébergée sur mon serveur. Malheureusement, ce genre d\’application ne court pas les rues. Mon premier choix s\’est porté sur Gregarius qui semble être l\’agrégateur web open source le plus populaire. Problème : le projet n\’est plus maintenu. Bref, en cherchant un peu, je suis tombé sur rssLounge. Il s\’agit d\’un agrégateur de flux dont le style est bien travaillé et qui utilise PHP/MySQL (et de l\’AJAX pour la navigation). Le traitement des flux est basé sur la bibliothèque Simple Pie, une des plus abouties.

Actuellement dans sa version 1.3, rssLounge propose presque tout ce qu\’on attend d\’un agrégateur :

  • classement des flux par catégorie
  • champ de recherche
  • paramètres d\’affichage \ »non-lu / tous / publié à telle date\ »
  • affichage spécifique pour les flux ne contenant que des images
  • marquage de flux en favoris
  • import/export en OPML (compatible Google Reader)
  • mise à jour des flux par AJAX ou crontab
\"rssLounge\"

Les deux seules fonctionnalités qu\’il lui font vraiment défaut selon moi sont la lecture des médias (vidéo ou audio) et l\’interprétation des balises spéciales permettant d\’afficher du code par exemple mais ceci semble plus lié à une limitation de Simple Pie. Hormis ces deux choses qui imposent parfois d\’ouvrir l\’article dans son site original, cette application est très efficace. Quelques détails supplémentaires : rssLounge peut (doit?) être protégé par un identifiant et un mot de passe mais ne gère pas le multi-compte. Ah! Et j\’oubliais, il est compatible avec les navigateurs basés sur Webkit et Gecko (Firefox, Safari, Opéra, Chrome, …) donc pas IE !!

Vous pouvez le tester sur la page de démo mise en place par l\’auteur de rssLounge.