Base de données Drupal fout La table cache_rules n'existe pas

Dernière mise à jour sur 6 sept. 2023 à 13:16:48.
Catégorie: Hébergement Serveurs Gérés

Drupal InnoDB MySQL

Drupal renvoie une erreur 'cache_rules' n'existe pas

Malheureusement, le système de cache de Drupal entraîne un vilain bogue. La structure de la base de données Drupal utilise le moteur de stockage transactionnel InnoDB. Il offre des avantages par rapport à MyISAM, mais l'un des plus gros inconvénients d'InnoDB est d'essayer de récupérer des données en cas de panne de la base de données.

Dans Drupal, cela peut générer la tristement célèbre PDOException : SQLSTATE[42S02] : Table ou vue de base introuvable : 1146 La table 'cache_rules' n'existe pas d'erreur.

Plus d'informations sur cette erreur peuvent être trouvées sur https://www.drupal.org/node/21...

Il existe plusieurs raisons pour lesquelles une base de données InnoDB peut planter, mais l'une des plus courantes et malheureusement la plus fatale est le manque d'espace disque. Cela garantit que les données à écrire dans les fichiers de table et de transaction sont incorrectes, ce qui entraîne une table corrompue qui peut même ne pas être visible dans phpMyAdmin ou via le client MySQL.

Quiconque souhaite simplement créer la table 'cache_rules' dans le cas de l'erreur ci-dessus recevra bientôt le message d'erreur suivant :

ERREUR 1005 (HY000) : Impossible de créer la table 'cache_rules' (errno : -1)

La raison pour laquelle cette erreur est déclenchée est qu'il existe un fichier cache_rules.idb sur le disque, mais pas de métadonnées de table. La simple suppression du fichier cache_rules.idb ne résout pas le problème, et la suggestion d'exécuter un mysqlcheck -r sur la base de données affectée n'aide évidemment pas puisque les fonctions de réparation de la base de données MySQL ne fonctionnent que sur le moteur de stockage MyISAM !

Comment résoudre le problème?

Malheureusement, pour réussir à recréer la table cache_rules, certaines étapes sont nécessaires :

  1. Faire une sauvegarde de la base de données actuelle (données et structure)
  2. Créer une nouvelle base de données MySQL
  3. Faire une importation de la sauvegarde vers la nouvelle base de données
  4. Créer la table cache_rules dans la nouvelle base de données

Et enfin:

  1. Ajustez les paramètres de connexion à la base de données dans Drupal afin d'utiliser la nouvelle base de données
  2. Supprimer l'ancienne base de données

C'est en effet beaucoup de travail, mais malheureusement la seule option réalisable et la plus rapide.

1. Sauvegarde de la base de données MySQL via mysqldump

Le moyen le plus rapide de sauvegarder une base de données MySAQL est via la commande mysqldump, mais vous aurez besoin d'un accès SSH à votre serveur d'hébergement/base de données :

[~]# mysqldump -u username -p myolddatabase > mydatabasebackup.sql

Si vous n'avez pas d'accès SSH, vous pouvez générer une exportation via phpMyAdmin, n'oubliez pas d'emporter avec vous la structure et les données !

2. Créer une nouvelle base de données

Le moyen le plus rapide de créer une nouvelle base de données est via le site Web My Kinamo. Si vous travaillez via SSH, cela peut être fait comme suit :

[~]# mysql -u username -p
mysql> CREATE DATABASE IF NOT EXISTS yournewdatabase;

3. Importation de votre sauvegarde de base de données dans la nouvelle base de données MySQL

L'import peut se faire via SSH, ou via phpMyAdmin. Cela peut être fait via SSH (ligne de commande) comme suit :

[~]# mysql -u username -p yournewdatabase < yourdatabasebackup.sql

4. Recréez la table cache_rules

La table 'cache_rules' peut être créée via la requête suivante, qui peut être exécutée via le client mysql, ou phpMyAdmin.

CREATE TABLE IF NOT EXISTS `cache_rules` (
 `cid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.',
 `data` longblob COMMENT 'A collection of data to cache.',
 `expire` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry should expire, or 0 for never.',
 `created` int(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry was created.',
 `serialized` smallint(6) NOT NULL DEFAULT '0' COMMENT 'A flag to indicate whether content is serialized (1) or not (0).',
 PRIMARY KEY (`cid`),
 KEY `expire` (`expire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Cache table for the rules engine to store configured items.';

La dernière étape consiste à modifier la connexion dans le fichier settings.php et à supprimer l'ancienne base de données.


Articles connexes

Paramètres des serveurs mail Kinamo (feuille de triche)

L'article suivant vous donne un résumé de la configuration et noms du serveurs mail de Kinamo. Avec la liste ici...

En savoir plus

Créer un filtre anti-spam avec le Kinamo Webmail

L'article suivant vous explique comment ajouter un filtre spécial pour mettre des messages SPAM automatiquement dans un dossier dans votre...

En savoir plus

Acheter un certificat SSL? Qu'est un certificat SSL?

Vous voulez acheter un certificat SSL? Mais, c'est quoi un certificat SSL? Et pourquoi est-ce que tous le monde dit...

En savoir plus

Besoin d'aide supplémentaire?

Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!

Sélectionnez votre langue

Toutes les langues: