Trouver et Réparer une table partitionnée sous mysql

Qui n’a jamais eu de tables à réparer sous MySQL ? Cependant, la première fois que l’on se retrouve avec une table partitionnée marquée « crashée » on peut éventuellement se poser la question de ce que l’on doit faire (surtout si cette dernière est volumineuse). Dans notre cas on essaiera de ne réparer que la partition mise en cause.

Trouver la partition qui pose problème

Pour ce faire il suffit de se connecter à notre base avec le shell mysql et de taper:

mysql> check table my_partitioned_table;
+----------------------------+-------+----------+-------------------------------------------------------+
| Table                      | Op    | Msg_type | Msg_text                                              |
+----------------------------+-------+----------+-------------------------------------------------------+
| MaBase.my_partitioned_table | check | warning  | 1 client is using or hasn't closed the table properly |
| MaBase.my_partitioned_table | check | warning  | 1 client is using or hasn't closed the table properly |
| MaBase.my_partitioned_table | check | error    | Found 669663 keys of 669678                           |
| MaBase.my_partitioned_table | check | error    | Partition p20140108 returned error                    |
| MaBase.my_partitioned_table | check | error    | Corrupt                                               |
+----------------------------+-------+----------+-------------------------------------------------------+

Attention le lancement de cette commande peut être un peu long suivant la taille de la table. Cependant, elle permet de nous ressortir quelle partition est en erreur sur la table.

La commande suivante va renvoyer sensiblement la même réponse mais par contre cette dernière se fait en donnant la partition. Elle nous permettra de vérifier, après le lancement de la réparation, que notre partition a bien été réparée.

mysql> ALTER TABLE my_partitioned_table CHECK PARTITION p20140108;
+----------------------------+-------+----------+-------------------------------------------------------+
| Table                      | Op    | Msg_type | Msg_text                                              |
+----------------------------+-------+----------+-------------------------------------------------------+
| MaBase.my_partitioned_table | check | warning  | Table is marked as crashed                            |
| MaBase.my_partitioned_table | check | warning  | 1 client is using or hasn't closed the table properly |
| MaBase.my_partitioned_table | check | error    | Found 669663 keys of 669678                           |
| MaBase.my_partitioned_table | check | error    | Partition p20140108 returned error                    |
| MaBase.my_partitioned_table | check | error    | Corrupt                                               |
+----------------------------+-------+----------+-------------------------------------------------------+

 Réparation de la partition

Le lancement d’un simple ALTER TABLE va permettre de ne réparer que la partition posant problème

mysql> ALTER TABLE my_partitioned_table REPAIR PARTITION p20140108;
+----------------------------+--------+----------+-------------------------------------------------+
| Table                      | Op     | Msg_type | Msg_text                                        |
+----------------------------+--------+----------+-------------------------------------------------+
| MaBase.my_partitioned_table | repair | info     | Wrong bytesec:   0-  0-  0 at 31387520; Skipped |
| MaBase.my_partitioned_table | repair | warning  | Number of rows changed from 669678 to 669663    |
| MaBase.my_partitioned_table | repair | status   | OK                                              |
+----------------------------+--------+----------+-------------------------------------------------+

On pourra vérifier la réparation de la partition avec la même commande que dans le paragraphe précédent:

mysql> ALTER TABLE my_partitioned_table CHECK PARTITION p20140108;
+----------------------------+-------+----------+----------+
| Table                      | Op    | Msg_type | Msg_text |
+----------------------------+-------+----------+----------+
| MaBase.my_partitioned_table | check | status   | OK       |
+----------------------------+-------+----------+----------+

 Conclusion

Comme vous avez pu le voir, la réparation d’une table avec des partitions est assez simple. Cependant, j’ai voulu vous faire part de la méthode que nous avons utilisée sur une table très volumineuse en production car la première question que je me suis posé à ce moment-là était « Est-ce que la réparation d’une table partitionnée se fait de la même manière qu’une table classique ? »

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *