Sauvegarder sa base de données MySQL sans perturber sa production

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

Dans la majorité des cas, pour sauvegarder une base de données MySQL, c’est la commande mysqldump, l’outil fourni par le SGBD, qui va être utilisé. Mais saviez-vous que cela n’est pas sans risque et que cette opération peut perturber les opérations en cours sur votre base de données ?

J’ai pu le constater à mes dépens en voulant effectuer la sauvegarde d’une base de données volumineuse. Lorsque la commande va commencer à récupérer les données, l’outil va mettre en place un verrou (LOCK) au niveau des tables ce qui va avoir pour conséquence de les rendre inaccessibles. Sur de petites volumétries, cela n’aura que peu d’incidence, mais si vous avez une grande quantité de données à récupérer, cela signifie que durant tout le temps de sauvegarde, votre application ne pourra pas accéder à la base de données de manière fluide. La conséquence dans mon cas, c’est plusieurs utilisateurs qui n’ont pu travailler sur l’outil en question, entrainant une interruption de service le temps de l’opération.

Pour éviter cela, mysqldump propose un certain nombre d’options qui vous permettra d’éviter ces déconvenues. Les deux plus importantes et que j’utilise dorénavant systématiquement sont:

  • --single-transaction qui va mettre en place une transaction (si cela est supporté par le moteur utilisé) afin de garantir la cohérence des données sans pour autant mettre en place un verrou
  • --skip-lock-tables qui comme son nom l’indique indique qu’il ne faut pas mettre en place de verrou.