La clé étrangère est l’un des composants de la base de données MariaDB. Elle est également connue sous le nom de clé de référencement et correspond au champ de clé primaire d’une autre table afin de maintenir l’intégrité référentielle. La table avec une clé étrangère est appelée la table enfant et la table avec la clé primaire est appelée la table parent. Si la clé étrangère est endommagée, cela peut affecter le respect des règles d’intégrité des données et la cohérence de la base de données. Dans un tel cas, vous pouvez rencontrer des problèmes lors de l’ajout ou de la modification de tables contenant des clés étrangères. Mais comment une clé étrangère peut-elle être endommagée et comment pouvez-vous la réparer ? C’est ce que nous allons voir dans ce billet.
Quelles sont les causes de corruption des clés étrangères (foreign keys) dans MariaDB ?
Il y a plusieurs raisons qui peuvent conduire à la corruption des clés étrangères et d’autres composants de MariaDB. Certaines d’entre elles sont
- Bugs dans le serveur MariaDB.
- Arrêt brutal du système pendant le processus de lecture/écriture.
- Redémarrage brutal de l’instance du serveur MariaDB.
- Panne de courant soudaine ou arrêt du serveur.
- Système d’exploitation défectueux.
- Le disque dur sur lequel est stockée la base de données MariaDB présente des secteurs défectueux.
- Arrêt inattendu (brutal) du système ou plantage lorsque le fichier de base de données est ouvert.
- Problèmes de matériel ou de logiciel.
- Espace de stockage insuffisant sur le disque sur lequel le fichier de base de données est enregistré.
- Attaque par un virus ou un logiciel malveillant.
Avant de trouver des solutions, vous devez vérifier que la base de données MariaDB n’est pas corrompue. Voici quelques moyens de vérifier si la base de données MariaDB est corrompue.
Méthode 1 : Utilisez l’instruction SHOW ENGINE INNODB STATUS
L’instruction SHOW ENGINE INNODB STATUS fournit des informations sur les clés étrangères qui peuvent être utilisées pour diagnostiquer les problèmes. Les restrictions de clés étrangères sont principalement à l’origine de problèmes de blocage ou de verrouillage. Vous pouvez consulter la section LATEST FOREIGN KEY ERROR et la section LATEST DETECTED DEADLOCK pour identifier les erreurs de clé étrangère et les problèmes de verrouillage.
Méthode 2 : Vérifier les journaux d’erreurs
Les journaux d’erreurs contiennent des informations sur tous les problèmes rencontrés dans les tables MariaDB. S’il y a un problème avec les clés étrangères, des messages d’erreur sont enregistrés dans les journaux d’erreurs qui indiquent des problèmes avec les contraintes de clés étrangères. Vous pouvez vérifier le fichier journal des erreurs pour trouver des preuves de violations ou de corruptions de clés étrangères.
Méthode 3 : Utilisez la commande CHECK TABLE
La commande CHECK TABLE vérifie que les tables MariaDB ne contiennent pas d’erreurs ou de problèmes. Cette commande soutient les tables stockées dans Archive, Aria, CSV, InnoDBet MyISAM et MyISAM. Voici la syntaxe de la commande CHECK TABLE :
CHECK TABLE nom_de_la_table [, nom_de_la_table] ... [option] ...
option = {Pour la mise à jour | RAPIDE | RAPIDE | MOYEN | ÉTENDU | MODIFIÉ}
Si la commande CHECK TABLE trouve un problème dans les tables, le moteur InnoDB plantera intentionnellement MariaDB pour éviter d’autres dommages.
Voici les méthodes que vous pouvez utiliser pour réparer et récupérer les clés étrangères corrompues dans MariaDB.
Méthode 1 : Remettre la sauvegarde avec l’utilitaire Mariabackup
Si vous disposez d’un fichier de sauvegarde mis à jour, vous pouvez remettre la base de données MariaDB à partir de la sauvegarde en utilisant Mariabackup – un outil intégré à MariaDB. Vous pouvez utiliser l’option -copy-back ou l’option -move-backup. Ci-dessous, vous apprendrez à utiliser l’option -copy-back de l’utilitaire Mariabackup pour remettre la sauvegarde en état :
Etape n°1 : Vider le répertoire de données
La commande -copy-back remet la sauvegarde dans le répertoire de données, qui est étiqueté -datadir. Avant d’exécuter la commande, vous devez donc vider le répertoire de données. Pour vérifier et vider le répertoire de données, allez dans le fichier de configuration, qui est normalement situé dans /etc/mysql/my.cnf.
Étape 2 : Désactiver le service du serveur MariaDB
Exécutez la commande suivante pour désactiver le service MariaDB Server :
Arrêtez mysql.server
Étape 3 : Exécutez Mariabackup avec l’option -copy-back.
Exécutez maintenant Mariabackup avec l’option -copy-back :
$ mariabackup --copy-back \N- $ mariabackup --copy-back \N- $ mariabackup --copy-back
--target-dir=/var/mariadb/backup/
Étape 4 : Modifier les autorisations d’accès aux fichiers
Ensuite, modifiez les autorisations de fichier du répertoire de données pour changer le propriétaire du fichier dans le répertoire de données. Exécutez la commande suivante :
$ chown -R mysql:mysql /var/lib/mysql/
Étape 5 : Redémarrer le service MariaDB
Redémarrez ensuite le service MariaDB à l’aide de la commande ci-dessous :
Arrêtez mysql.server
Méthode 2 : Utiliser la méthode dump-and-reload
Si la sauvegarde est obsolète ou si vous devez remettre certaines tables de la base de données MariaDB, vous pouvez utiliser la méthode Dump and Reload. Cette méthode vous permet de remettre les tables de la base de données MariaDB ainsi que les clés étrangères de ces tables. Voyons comment vous pouvez utiliser cette méthode.
Vous devez d’abord redémarrer MariaDB avec l’option -innodb-force-recovery=#. Si MariaDB ne démarre pas, essayez à nouveau de définir une valeur plus élevée jusqu’à ce qu’il démarre. Une fois que le mode de récupération des données est activé après un crash, essayez de récupérer les données de la table. Voici les étapes à suivre :
- Extrayez les données de la table dont les clés étrangères sont endommagées à l’aide de la commande SELECT.
- Créez ensuite la table avec la même structure qu’une table endommagée. Pour ce faire, vous pouvez exécuter la commande SHOW CREATE TABLE comme indiqué ci-dessous :
SHOW CREATE TABLE nom_de_table
- Enregistrez maintenant les données dans le tableau créé.
- Redémarrez MariaDB avec la commande suivante :
Démarrez mysqld
- Ensuite, supprimez la table à l’aide de la commande DROP TABLE.
DROP [TEMPORARY] TABLE [IF EXISTS] [/*COMMENT TO SAVE*/]
nom_de_table [, nom_de_table] ...
[WAIT n|NOWAIT]
[RESTREINDRE | CASCADE]
La commande DROP TABLE supprime toutes les données de la table, y compris les définitions de table et les déclencheurs.
- Recréez maintenant la table et remettez le dump.
Remarque : Vous pouvez remettre les données d’une table à la fois en utilisant la méthode Dump and Reload (vidage et rechargement).
Méthode 3 : Utilisez un programme professionnel de réparation de MariaDB
Pour réparer la base de données MariaDB rapidement et facilement, vous pouvez utiliser un outil professionnel de réparation de base de données MariaDB comme Stellar Repair for MySQL. Il s’agit d’un outil convivial qui peut récupérer toutes les données telles que les clés étrangères, les clés primaires, les vues, les déclencheurs, etc. d’une base de données MariaDB corrompue. L’outil dispose d’une interface utilisateur interactive qui vous aide à effectuer la réparation et la récupération des données en quelques étapes faciles.
Voici quelques-unes des principales caractéristiques de Stellar Repair for MySQL :
- Soutien de toutes les versions de MariaDB jusqu’à 11.3.2
- Remet en état toutes les données des bases de données MySQL, y compris les registres supprimés et les tables de partition.
- Répare les tables MariaDB créées dans les moteurs InnoDB et MyISAM avec une précision absolue
- Fournit un aperçu amélioré des données réparées avant l’enregistrement.
- Permet la réparation simultanée de plusieurs bases de données
- Permet d’enregistrer la base de données MariaDB réparée dans différents formats, tels que MySQL, MariaDB, SQL Script, CSV, HTML et XLS.
- Compatible avec les systèmes d’exploitation Windows et Linux
Conclusion
Les clés étrangères dans MariaDB peuvent être corrompues pour diverses raisons. Vous pouvez utiliser les méthodes mentionnées ci-dessus pour réparer une base de données MariaDB dont les clés étrangères sont corrompues. Cependant, la meilleure façon de réparer la base de données corrompue est d’utiliser un outil de réparation MariaDB spécialisé, tel que Stellar Repair for MySQL. Cet outil de réparation de base de données peut réparer la base de données endommagée et récupérer toutes les données, y compris les clés primaires et étrangères, avec une précision absolue. Pour tester les fonctionnalités de Stellar Repair for MySQL, téléchargez la version de démonstration gratuite. L’outil est soutenu par toutes les versions du serveur MariaDB.
Was this article helpful?