En faisant l'expérience de l'option --compact, je me suis aperçu qu'elle pouvait minimiser la taille de mes dumps d'environ 6 % en enlevant tout ce qui est, semble-t-il, peu utile.
Sauf que, dans les choses "peu utiles" figurent les instructions nécessaires pour ajouter correctement les références (clés étrangères) qui relient le contenu des tables entre elles.
Supposons que nous sommes hébergeurs de blogs et que nous avons une table user contenant la liste des utilisateurs, ainsi qu'une table blog avec la liste des blogs hébergés. Ces références indiquent par exemple que le champ user_id de la table blog est lié au champ user_id de la table user. Ainsi si on supprime un utilisateur lambda de la table user, le serveur SQL supprimera automatiquement son blog de la table blog, parce que le champ user_id de la table blog doit correspondre obligatoirement à un utilisateur existant.
Alors que fait cette option --compact, ou plutôt que ne fait-elle pas ? Elle crée d'abord les tables avec les références aux clés étrangères. Jusque là, tout va bien. Ensuite elle commence l'insertion des enregistrements dans notre table blog (remarquez que "b" vient avant le "u", ce qui explique que la table user est remplie plutôt à la fin). Mais à ce moment-là, tout plante lamentablement, avec un message d'erreur incompréhensible :
En essayant de déchiffrer la signification profonde de ERROR 1005, HY000 et errno: 150, j'ai réalisé que lorsque ma sauvegarde ajoutait une ligne à la table blog, le serveur SQL lui refusait d'obéir, car cette ligne d'enregistrement contenait une référence vers un utilisateur qui n'existe pas encore. Sans la vilaine option --compact, la sauvegarde incluerait des instructions supplémentaires pour désactiver la vérification des références lors de l'insertion des données.
Avec ce fichier de sauvegarde, la solution est d'effectuer les insertions de données dans un ordre qui respecte les références d'une table à l'autre. Dans notre cas, il s'agit donc de récupérer la table user d'abord, et la table blog ensutie. Cependant, les cas pratiques sont généralement moins triviaux à résoudre. Sachez qu'il a fallu près de cinq heures à Chty pour bidouiller son fichier de sauvegarde en plaçant les données de la table user d'abord, celles de la table blog après, et ainsi de sutie.
P.S. - Si, cher lecteur, chère lectrice, tu as une solution plus élégante que celle de bidouiller le fichier de sauvegarde à la main, je suis preneur :)













