Drupal 9 - Modul ki/Bekapcsolása adatbázisban

Default book

Van olyan, hogy az ember egy Drupal modult kikapcsol és összeomlik az egész honlap. Ilyenkor a hagyományos megoldások az admin felületen vagy a Drush parancsok nem működnek (Ilyen történt velem). Hogyan lehet visszakapcsolni a modult?

1. Először is ne töröld ki a modul fájljait, vagy ha kitörölted, akkor ugyanazt a verziót kell ugyanoda visszamásolni.

2. Telepíts fel egy phpMyAdmin-t vagy adminer-t. Ezekkel tudsz kapcsolódni az adatbázishoz és abban módosításokat végezni. Azt javaslom, hogy lehetőség szerint ne default módon telepítsd bármelyiket is, mert akkor megpróbálják előbb-utóbb meghackelni az oldaladat.

3. Lépj be az adatbázis-kezelő felületre a sites/default/setting.php végén lévő adatok segítségével.

$databases['default']['default'] = array (
  'database' => '<database neve>',
  'username' => '<user neve>',
  'password' => '<jelszó>',
  'prefix' => '<prefix, ha van>',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

4. Ha sikerült belépnek és kiválasztottad az adatbázist, akkor keresd meg a config táblát és a táblán belül azt a rekordot, amelyben a name mező értéke 'core.extension'.

Esetleg így: SELECT * FROM config WHERE name= 'core.extension'

5. Ennek a rekordnak a data mezőjében található egy serializált (PHP) tömb, amely a telepített modulok listáját tartalmazza. Azt az adatot másold ki egy stringbe és írj egy rövid PHP kódot, amely unserializálja. valahogy így:

<?php
$a = '... ide tedd az adatsort a szerverről ....';
$b = unserialize($a);
$b['module']['modul_belső_neve'] = 0;
$sorted = ksort($b['module']);
$c = serialize($sorted);
print $c;

6. Az oldalra kiírt adatsort kell betenni az előbbi helyre.

Ugyanezt meg kell csinálni a cache_config táblában ugyanerre a rekordra.

7. Érdemes ilyen és ehhez hasonló esetekben az összes cache táblát TRUNCATE SQL paranccsal lenyesni azaz kitörölni a cache-eket.

TRUNCATE cache_config;
TRUNCATE cache_container;
TRUNCATE cache_data;
TRUNCATE cache_default;
TRUNCATE cache_discovery;
TRUNCATE cache_dynamic_page_cache;
TRUNCATE cache_entity;
TRUNCATE cache_menu;
TRUNCATE cache_render;
TRUNCATE cache_toolbar;

Ha mindent jól csináltál, akkor (valószínűleg) visszakerül az adatbázis a helyére.

Megjegyzés

Az elején írtam, hogy kitöröltem egy modult, amit nem kellett volna.

  1. Backupoltam az adatbázist és lementettem a saját gépemre a Drupal teljes fájltartalmát is.
  2. Sok kísérletezés után ezzel a módszerrel visszaállítottam a saját gépemen a modult, majd visszaállt a rendszer.
  3. Ugyanezt megcsináltam az éles szerveren is, de semmi sem változott.
  4. Végül a megjavított adatbázist backupoltam a fejlesztői gépen és beimportáltam az éles szerverre.

Így már működött a visszaállítás.