Reparaturskript für Portierung von MySQL 5.0 nach 4.0 läuft nicht
am 19.11.2006 - 19:18 Uhr in
Wenn man auf MySQL mit Version größer 4.1 entwickelt hat und der Provider nur 4.0 bietet, läuft man in die auto_increment-Falle. Nach dem Upload fehlt bei allen Tabellen die auto_increment-Eigenschaft der Primärschlüssel. (Das sollte man in die FAQ aufnehmen, denn viele Provider haben noch MySQL keienr als 4.1)
Hier zu gibt es das Skript:
<?
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "yourlocalbd";
mysql_connect($hostname,$username,$password) or die("Can't create connection");
$res1 = mysql_query("SHOW TABLES FROM $dbName");
$i=0;
$fp = fopen ("ai_fix.sql", "w");
while($row1 = mysql_fetch_array($res1)){
$res2 = mysql_db_query($dbName, "SHOW CREATE TABLE $row1[0]");
while($row2 = mysql_fetch_array($res2)){
preg_match("/\s*(\W\w+\W)(.*auto_increment)/", $row2[1], $matches);
if($matches){
$i++;
$str = "ALTER TABLE ".$row2[0]." CHANGE ".$matches[1]."
".$matches[1]."".$matches[2].";\n";
fwrite($fp, $str);
}
}
mysql_free_result($res2);
}
fclose($fp);
mysql_free_result($res1);
mysql_close();
echo "Entries created: ".$i;
?>
Ich habe leider keine Erfarung mit PHP-Skripten, daher gibt es vielleicht eine einfache Antwort auf meine Frage. :-)
Oben muss man einige Angaben ändern, dann scheint das Skript die Datei "ai_fix.sql" zu erzeugen, die ein SQL-Skript enthält, das die Tabellen mittels "ALTER-TABLE"-Befehlen repariert, d.h. bei den Schlüsseln die auto_increment-Eigenschaft setzt. "ai_fix.sql" muss man dann wohl über phpmyadmin ausführen.
Problem: Ich erhalte die Fehlermeldung:
fopen(ai_fix.sql): failed to open stream: Permission denied
Offenbar reichen die Rechte zum Erzeugen der Datei nicht aus. Ich vermute, dass das Skript die Datei in das Verzeichnis, in dem es selbst steht, schreiben will. Über FTP sehe ich, dass die Rechte als
drwxr-xr-x
gesetzt sind. Wieso funtioniert das nicht? Läuft das Skript mit anderen Rechten? Ist der Besitzer des Skripts ein anderer User?
Fragen über Fragen,ich habe natürlich keinen Shell-Zugriff.
Farewell
Feodor
- Anmelden oder Registrieren um Kommentare zu schreiben
Es lag an der Rechten aber das Skript funtioniert nicht
am 20.11.2006 - 13:15 Uhr
Hallo nochmal,
dass die Datei nicht zum Schreiben geöffnet weren konnte, lag an den Rechten, da das Skript nicht im Userkontext ausgeführt wird.
Das zugrundeliegende AUTO_INCREMENT-Problem ist auf Drupal.org diskutiert. Dort findet man auch die Quelle des Skripts.
Allerdings: Das Skript funktioniert bei mir nicht, obwohl es auf drupal.org eine positive Rückmeldung gab. Der Zugriff auf die Datenbank klappt, aber es werden keine SQL-Dateizeilen erzeugt. Debuggen ist äußerst mühsam, da ich multiple Skripte mit verschiedenen echo-Anweisungen hochladen und dabei immer die Rechte über ein Webinterface ändern muss. Ich werde darüber berichten.
Farewell
Feodor
http://feodor.de
Skript muss mindestens auf MySQL 4.1 laufen
am 20.11.2006 - 16:49 Uhr
Das Skript muss auf dem MySQL-Server mit der höheren Versionsnummer laufen. Man kommt drauf, wenn man den regulären Ausdruck in dem preg_match-Funktionsaufruf analysiert: Der Eintrag auto_increment, nach dem gesucht wird, kann nur von MySql >= 4.1 erzeugt werden.
Es läuft also so:
http://localhost/SkriptFileName.php
angibt. Das bewirkt, dass im Druplaverzeichnis die Datei ai_fix.sql entsteht.Leider fehlte in der Veröffentlichungsstllen jeglicher Kommentar, so dass man das Skript lesen können muss, um es anzuwenden.
Farewell
http://feodor.de
http://feodor.de