Laatst bijgewerkt op 6 sep 2023 13:16:48.
Categorie:
Managed Servers
Helaas sleept het cache systeem van Drupal een vervelende bug mee. De Drupal database structuur maakt gebruik van de transactionele InnoDB storage engine. Deze biedt voordelen ten opzichte van MyISAM maar een van de grotere nadelen aan InnoDB is het trachten recoveren van gegevens in geval van een database crash.
Binnen Drupal kan dit de beruchte PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cache_rules' doesn't exist fout geven.
Meer informatie over deze fout vindt u op https://www.drupal.org/node/2160645
Er zijn verschillende redenen waarom een InnoDB database kan crashen, maar een van de meest voorkomende en helaas meest fatale is een gebrek aan diskruimte. Dit zorgt er voor dat de data die weg geschreven moet worden zowel in tabel als transaction bestanden niet correct is, met als gevolg een corrupte tabel die mogelijks zelfs niet zichtbaar is in phpMyAdmin of via de MySQL client.
Wie in het geval van bovenstaande error eenvoudig de 'cache_rules' tabel wil aanmaken krijgt al gauw volgende foutmelding:
ERROR 1005 (HY000): Can't create table 'cache_rules' (errno: -1)
De reden waarom deze fout getriggered wordt is omdat op schijf een cache_rules.idb bestand aanwezig is, maar geen table metadata. Het eenvoudig verwijderen van de cache_rules.idb file geeft geen oplossing, en de suggestie om een mysqlcheck -r uit te voeren op de desbetreffende database helpt uiteraard niet aangezien MySQL database repair functies enkel werken op de MyISAM storage engine!
Om succesvol de cache_rules tabel opnieuw aan te maken zijn helaas enkele stappen nodig:
En tenslotte:
Dit is inderdaad veel werk, maar helaas de enige werkbare, en snelste optie.
De snelste manier om een backup van een MySAQL databank te maken is via het mysqldump commando, maar dan heeft u wel SSH toegang nodig tot uw hosting / database server:
[~]# mysqldump -u username -p myolddatabase > mydatabasebackup.sql
Als u geen SSH toegang heeft kan u een export genereren via phpMyAdmin, vergeet dan niet zowel structuur als data mee te nemen!
De snelste manier om een nieuwe databank aan te maken is via de Mijn Kinamo website. Indien u werkt via SSH kan dit als volgt:
[~]# mysql -u username -p mysql> CREATE DATABASE IF NOT EXISTS yournewdatabase;
De import kan gebeuren via SSH, of via phpMyAdmin. Via SSH (command line) kan dit als volgt:
[~]# mysql -u username -p yournewdatabase < yourdatabasebackup.sql
De 'cache_rules' tabel kan u aanmaken via volgende query, deze kan u uitvoeren via de mysql client, of 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.';
De laatste stap is de connectie aanpassen in het settings.php bestand, en het verwijderen van de oude database.
Werden niet al uw vragen beantwoord?
Geen nood, via een support aanvraag helpen wij u graag verder!