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