Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 07. März 2014 22:47

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

[GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Hallo Cmsms-Gemeinde.

Ich muss mal einen Hilferuf starten.
Bin mit 2 Projekten zu einen neuem Provider gezogen.
Bei beiden Projekten ist nach dem Umzug jeweils nur die Startseite zu sehen, alles andere fehlt.

Unter Inhalte->Seiten findet man gar nichts, dafür im Systemprotokoll für jede Seite einen Fehler "failed to get content for valid content id xx"

Systeminfo -> alles ok
Cache löschen, Seitenhierarchie aktualisieren (hier wird die Anzahl der Seiten angezeigt) -> bringt alles nichts
Ein System auf akt. version geupdatet -> kein Erfolg
Datenbank angeschaut -> sieht ok aus, aber nicht viel Ahnung im Zusammenhang mit cmsms??

Module:
CMSMailer        5.2.2
CMSPrinting        1.0.5
FileManager        1.4.4
MenuManager    1.8.6
MicroTiny        1.2.6
ModuleManager    1.5.5
ThemeManager    1.1.8
TinyMCE        2.9.12
Captcha        0.4.6
FormBuilder        0.7.3

PHP-Version: 5.3 im CGI-Modus
mysql: 5.1.73 (da weiß ich nicht, mit welcher Version das vorher lief?) -> doch, 5.5

Ok, hat jemand eine Idee oder Hinweis wie dem Problem beizukommen ist?

Danke schon mal im Voraus!

Beitrag geändert von joeking (07. März 2014 22:56)

Offline

#2 08. März 2014 07:33

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Willkommen im Forum!

Wie genau hast du den Umzug durchgeführt. Die Fehlermeldung klingt, als ob da etwas schief gegangen wäre...


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#3 08. März 2014 13:22

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Hallo cyberman

und danke für die schnelle Reaktion.

Die Ursache hab ich inzwischen gefunden, die Lösung allerdings noch nicht.

Ich habe im Zusammenhang mit dem Umzug die DB-Tabellen mit einem Prefix versehen.
config.php natürlich entspr. angepasst.

Das ist definitiv die Ursache für den Effekt, mach ich das rückgängig, ist's ok.
Den Prefix hätte ich aber gern, um mehrere (kleinere) Projekte in einer DB zu halten.

Den Installationsassistent hab ich auch schon noch mal drüber laufen lassen (prefix angegeben), aber dabei wird ja die DB nicht geändert. Es muss also in der DB irgendwas geben, was den Prefix mit speichert.
Gefunden hab ich allerdings nichts ...

Offline

#4 08. März 2014 13:39

Cherry
CMS/ms-Profi
Registriert: 15. Dezember 2010
Beiträge: 529

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Den DB Prefix gibt man in der config.php an:
$config['db_prefix'] = 'cms_';

da kannst du ihn entsprechend ändern, wie du ihn brauchst.
Danach CMSms Cache leeren.
Dann sollte das funktionieren.

Beitrag geändert von Cherry (08. März 2014 13:39)

Offline

#5 08. März 2014 14:15

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Ja danke Cherry,

aber genau das fkt. eben nicht.

Offline

#6 10. März 2014 00:11

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Nachtrag:

Das Problem wird hier auch beschrieben.

Leider ohne Lösung  sad
Hat hier vielleicht jemand eine?

Offline

#7 10. März 2014 13:36

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.177

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Das Problem liegt an den Indizes der Tabellen.
Für den Indexnamen wird in einigen Tabellen das Tabellenpräfix mit verwendet. (keine Ahnung wieso)
Ändert man das Tabellenpräfix, passen diese Indizes nicht mehr.
Dadurch schlagen SQL-Abfragen fehl wie z.B.

$query = 'SELECT * FROM '.cms_db_prefix().'content FORCE INDEX ('.cms_db_prefix().'index_content_by_idhier)';

Denn es gibt keinen Index mit dem neuen Tabellenpräfix.
(hätte im Debug-Modus eigentlich sofort auffallen müssen)

Optimieren/Reparieren der Tabelle oder Cache löschen bringt hier leider auch keine Lösung. Die Indizes müssen neu angelegt/umbenannt werden. Dazu folgendes Script als UDT speichern und im Backend ausführen (vorher im Code das alte Tabellenpräfix angeben):

$old_db_prefix = "cms_"; // change this to match your own OLD db prefix

$db       =& cmsms()->GetDb();
$dbresult = $db->Execute("SHOW TABLES LIKE '" . cms_db_prefix() . "%'");
$tables   = array();

while($dbresult && $row = $dbresult->FetchRow())
	$tables = array_merge($tables, array_values($row));

foreach($tables as $t)
{
	$dbresult = $db->Execute("SHOW INDEX FROM `$t` WHERE `Key_name` LIKE '" . $old_db_prefix . "%'");

	$indizes  = array();

	if(version_compare(mysql_get_server_info(), "5.7", ">="))
	{
		while($dbresult && $row = $dbresult->FetchRow())
			$db->Execute("ALTER TABLE `$t` RENAME INDEX `" . $row['Key_name'] . "` TO '" . cms_db_prefix() . substr($row['Key_name'], strlen($old_db_prefix)) . "'");
		continue;
	}

	while($dbresult && $row = $dbresult->FetchRow())
		$indizes[$row['Key_name']][] = $row['Column_name'];

	foreach($indizes as $k => $v)
	{
		$new_index = cms_db_prefix() . substr($k, strlen($old_db_prefix));
		$db->Execute("ALTER TABLE `$t` DROP INDEX `" . $k . "`");
		$db->Execute("ALTER TABLE `$t` ADD INDEX `" . $new_index . "` (`" . implode("`,`", $v) . "`)");
	}
}


EDIT 1:
Hab dan code mal noch abgeändert, falls jemand mehrere CMS Instanzen in einer Datenbank hat.


EDIT 2:
Man könnte natürlich auch einfach die Tabellen exportieren das SQL-Skript ändern und wieder importieren.
Aber da muss man wissen was man wo wie ändern muss.
Momentan scheint es sich nur auf die Tabelle "content" zu beschränken.
Aber wer weiß, wie das in Zukunft aussieht.
Ich hab jedenfalls keine Lust, immer im Code rumwühlen zu müssen um herauszufinden welche Indizes man ggfs. wie ändern muss.

EDIT 3:
Hab grad noch einen kleinen peinlichen Fehler mit der DB-Version korrigiert.
(Hatte dummerweise die AdoDB Version anstelle der MySQL Version verglichen roll )

Beitrag geändert von NaN (11. März 2014 12:55)

Offline

#8 11. März 2014 13:04

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Hallo Nan,

und vielen Dank für die Lösung des Problems.

Ja, man sieht es auch im Debug-Modus (hätte man von einem solchen gewusst ...)

Das Skript (erste Version) lief mit einer kleinen Einschränkung:
Die "$db->Execute("ALTER TABLE ..." Anweisung in der Version >=5.7 Abfrage gefiel dem Parser im CMSMS nicht -> ließ sich nicht speichern.

Hab's nicht weiter analysiert, da für meinen Fall keine Bedeutung.

Auf jeden Fall sind jetzt 3 kleinere Projekte mit Prefix in eine DB gezogen und alles fkt. wie gehabt.

Offline

#9 11. März 2014 13:11

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.177

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Das Skript (erste Version) lief mit einer kleinen Einschränkung:

Ja, da fehlte am Ende der Zeile eine Klammer  roll
Habs korrigiert.

Offline

#10 11. März 2014 14:02

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

joeking schrieb:

man sieht es auch im Debug-Modus (hätte man von einem solchen gewusst ...)

Ein bisschen musst du dich schon mit der Dokumentation beschäftigen. Und die Referenz für die config.php ist bei CMSMS im /doc Verzeichnis immer mit dabei  wink.


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#11 11. März 2014 16:57

joeking
hat von CMS/ms gehört
Ort: Torgau
Registriert: 08. August 2011
Beiträge: 6

Re: [GELÖST] Fehler nach Änderung des Datenbank-Präfixes

Ja, ich sehe den erhobenen Zeigefinger und gelobe Besserung!  cool

Deine Signatur ist schon ok!

Danke noch mal allen Beteiligten für die schnelle Hilfe.

Offline