Tabelle con_art futsch: indizies neusetzen, oder was?
Verfasst: Di 5. Dez 2006, 10:03
liebe Leute,
ich habe folgendes Problem: irgendwie ging "unsere" Tabelle con_art futsch (Serverproblem, zuviele Connections, inkonsitente Transaktion, was auch immer). Backup gibts kein aktuelles, das den Fehler nicht auch schon hat.
Nun versuche ich die con_art wiederherzustellen. Aber ein REPAIR TABLE funktioniert nicht, da die Tabelle wirklich verschossen ist (Prozess wartet endlos auf die Tabelle, MySQL-Front Client stürzt ab, oder phpMyAdmin erhält CGI-Timeout).
Meine Idee war nun, eine neue Tabelle con_art anzulegen und diese mit den idarts von art_lang zu füllen (client gibts nur einen, Artikel sind es knapp 90).
Ich ging vor wie folgt: Kopie der ganzen DB, ohne fehlerhafte con_art, con_art mit folgendem SQL-Dump erstellen:
anschliessend habe ich ein kleines Skriptlein geschnipselt, das die Artikel-IDs von art_lang holt und in der DB in con_art einfüllt:
Super chic, alles da, im Backend komme ich wieder auf Content->Artikel, nur werden mir dort keine Artikel mehr angezeigt. Frontend läuft natürlich auch nicht. Die Tabelle con_art ist aber gefüllt.
Mein Versuch, nachdem ich hier im Forum nach "indizies" gesucht habe:
bringt also auch nix...
Meine Frage nun, wie fügt Contenido Artikel ein, welche Verkettungen bestehen, oder wie kann ich die Indizies korrekt wiederherstellen?
Ich bin Euch sehr sehr dankbar für Hilfe!
Conradius
ich habe folgendes Problem: irgendwie ging "unsere" Tabelle con_art futsch (Serverproblem, zuviele Connections, inkonsitente Transaktion, was auch immer). Backup gibts kein aktuelles, das den Fehler nicht auch schon hat.
Nun versuche ich die con_art wiederherzustellen. Aber ein REPAIR TABLE funktioniert nicht, da die Tabelle wirklich verschossen ist (Prozess wartet endlos auf die Tabelle, MySQL-Front Client stürzt ab, oder phpMyAdmin erhält CGI-Timeout).
Meine Idee war nun, eine neue Tabelle con_art anzulegen und diese mit den idarts von art_lang zu füllen (client gibts nur einen, Artikel sind es knapp 90).
Ich ging vor wie folgt: Kopie der ganzen DB, ohne fehlerhafte con_art, con_art mit folgendem SQL-Dump erstellen:
Code: Alles auswählen
CREATE TABLE `con_art` (
`idart` int(10) NOT NULL default '0',
`idclient` int(10) NOT NULL default '0',
PRIMARY KEY (`idart`),
KEY `idart` (`idart`),
KEY `idclient` (`idclient`),
KEY `idart_2` (`idart`),
KEY `idclient_2` (`idclient`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Code: Alles auswählen
<?php
include_once ('../config.php');
include_once ('../'.$contenido_path.'includes/config.php');
// DB-Objekt inititalisieren
if ( !is_object( $db1 ) ) {
$db1 = new DB_Contenido;
} // end if
$sql1 = "SELECT
idart
FROM
con_art_lang";
$db1->query( $sql1 );
$id = 1;
while ( $db1->next_record() ) {
// DB-Objekt inititalisieren
if ( !is_object( $db2 ) ) {
$db2 = new DB_Contenido;
} // end if
$sql = "INSERT INTO `con_art` VALUES ('".$db1->f('idart')."', '1')";
$db2->query( $sql );
$id++;
} // end while
echo 'Es wurden '.$id.' Einträge eingefügt.';
?>
Mein Versuch, nachdem ich hier im Forum nach "indizies" gesucht habe:
Code: Alles auswählen
Fehler
SQL-Befehl:
ALTER TABLE con_art ADD INDEX idart( idart ) ;
MySQL meldet: Dokumentation
#1061 - Duplicate key name 'idart'
Meine Frage nun, wie fügt Contenido Artikel ein, welche Verkettungen bestehen, oder wie kann ich die Indizies korrekt wiederherstellen?
Ich bin Euch sehr sehr dankbar für Hilfe!
Conradius