Dernière mise à jour sur 6 sept. 2023, 13:16:48.
Catégorie:
Hébergement Serveurs Gérés
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 !
Malheureusement, pour réussir à recréer la table cache_rules, certaines étapes sont nécessaires :
Et enfin:
C'est en effet beaucoup de travail, mais malheureusement la seule option réalisable et la plus rapide.
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 !
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;
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
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.
Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!