Kann mysql dump nicht importieren: auto_increment Problem
Kann mysql dump nicht importieren: auto_increment Problem
am 06.03.2006 21:29:44 von akorthaus
Hallo!
Ich habe ein Probleme von MySQL 3.23 auf 4.1 upzudaten, und zwar habe=20
ich eine Datenbank aus MySQL 3.23.58 per "mysqldump" exportiert:
mysqldump --opt [database] > backup.sql
Das ganze wollte ich dann einfach in MySQL 4.1 importieren:
mysqladmin create [database]
mysql [database] < backup.sql
Allerdings erhalte ich dabei folgende Fehlermeldung:
MySQL Error Number 1062
Dublicate Entry "3114" for key 1
Allerdings kommt der string "3114" in der backup.sql alleinstehend nur=20
ein einziges mal vor. Erst wenn ich in der entsprechenden=20
Tabellendefinition auto_increment entferne, kann ich das ganze ohne=20
Probleme importieren. Wenn ich dann aber nachträglich auto_increment=20
wieder hinzufüge, erhalte ich genau denselben Fehler.
Die Tabelle ist relativ klein, ein paar hundert Datensätze vielleicht, =
die auto_increment Spalte ist zugleich der Primärschlüssel, "NOT NULL=
"=20
und vom Format INT(8).
Wo könnte das Problem liegen?
Noch eine Frage zum ODBC Connector, funktioniert davon jede Version mit=20
jeder MySQL Version?
Viele Grüße
Andreas
PS: sollte 4.1.18 eigentlich nicht ohne Probleme auf Windows 2003 Server =
laufen? Ich bekomme das Teil da nicht gestartet. Und 3.23 hatte=20
Konflikte mit irgendeinem NAT Modul bzw. der Windows Firewall. Gibt es=20
da bei Windows 2003 Server irgendwas besonderes zu beachten?
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 08:22:24 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 10:04:22 von Axel Schwenke
Andreas Korthaus wrote:
> MySQL Error Number 1062
> Dublicate Entry "3114" for key 1
> Allerdings kommt der string "3114" in der backup.sql alleinstehend nur
> ein einziges mal vor.
Anscheinend hast in einer Tabelle eine Zeile mit dem Wert 0 in einer
AUTO_INCREMENT Spalte. Dieser Wert darf da aber nicht stehen! Beim
Import wird aus 0 der nächste freie Wert, anscheinend 3114. Wenn dann
die "richtige" Zeile mit 3114 kommt, knallt es.
Mach also in deiner Original-Datenbank ein
SELECT @x:=MAX() FROM
UPDATE SET =@x+1 WHERE =0
Dann nochmal dumpen und einspielen.
Noch was: die Migration pre-4.1 auf 4.1+ hat ein paar Tücken. Lies den
"Upgrading MySQL" Abschnitt des Handbuchs. Gerade bei diesem Upgrade
ist es wünschenswert, das 4.1+ mysqldump zum Dumpen zu verwenden.
Noch einfacher ist es, das $DATADIR einfach weiter zu verwenden. Den
Dump macht man dann nur zur Sicherheit.
XL
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 11:02:59 von akorthaus
Andreas Kretschmer schrieb:
>> Ich habe ein Probleme von MySQL 3.23 auf 4.1 upzudaten, und zwar habe =
>=20
> Ist man nicht mittlerweile bei 5.x?
Ja, aber je größer der Update-Schritt desto größer die Gefahr das=
s=20
irgendwas nicht mehr funktioniert. Bis vor kurzem war 4.1 auch noch als=20
"GA" markiert. Abgesehen brauche ich für diese Software kein einziges=20
der neuen Features - also warum nicht lieber eine besser=20
ausgetestete/ausgereiftere Version verwenden? Auf 4.1 habe ich nur=20
aktualisiert, weil ich hoffte, dass es mit Windows 2003 besser=20
zusammenarbeitet - das funktioniert aber leider auch nicht (mit WinXP=20
ist beides kein Problem, aber wozu haben wir bitte einen Server?).
>> ich eine Datenbank aus MySQL 3.23.58 per "mysqldump" exportiert:
>=20
> Hast Du das Dump-Tool der neueren Version benutzt?
Nein. Aber wie auch immer, das sind ganz simple INSERT Anweisungen,=20
keine komplizierten Tabellen, und wenn ich auto_increment an dieser=20
einen Tabelle wegnehme, funktioniert ja auch alles. Ich verstehe nicht,=20
warum ich es nach dem Import auch nicht wieder hinzufügen kann.
>> Allerdings erhalte ich dabei folgende Fehlermeldung:
>>
>> MySQL Error Number 1062
>> Dublicate Entry "3114" for key 1
>=20
> Da sag ich jetzt mal nix zu, hab grad keine Lust zum bashen.
Tu Dir keinen Zwang an - wie gesagt - es gibt keine zwei Datensätze mit=
=20
diesem Primärschlüssel, die Spalte ist groß genug - wäre also fü=
r jeden=20
Hinweis dankbar!
> MySQL ist ein RDBMS, zumindest behauptet es dies von sich. Dinge wie
> NAT, Netzwerk etc. hat das drunter liegende OS zu erbringen.
Und das funktioniert auch, alle anderen RDBMS kommen damit ja auch=20
zurecht. Entweder der Hersteller sagt das Produkt läuft auf Windows,=20
dann bitte auch ohne die Konflikte mit der Windows Firewall und dessen=20
NAT-Implementierung, oder man lässt es ganz. MySQL (sowohl 3.23 als auc=
h=20
4.1) macht irgendwas mit der ipnat.sys, dass das restliche Problem=20
Schwierigkeiten bekommt.
> Das Wintendo dafür, ähm, suboptimal ist, ist hinlänglich bekannt,=
allerdings
> nicht Gegenstand dieser NG.
Nein, zum Glück nicht. Ich verwende MySQL und Linux seit vielen Jahren =
auf mehreren Servern für verschiedenste Anwendungen. Aber leider ist=20
Linux nicht überall für so gut zu gebrauchen wie für LAMP. Windows =
2003=20
finde ich durchaus gelungen, erheblich besser als alle "Linux GUI=20
Enterprise Server" die ich bisher gesehen habe. Linux macht für mich nu=
r=20
so lange Sinn, wie ich mit den Programmen auskomme, die hier besonders=20
gut sind. Als Haupt-Server für ein kleines/reines Windows-Netzwerk ist =
es nur eine Krücke... Aber wie Du schon sagtest, das ist hier nicht das=
=20
Thema.
> Du solltest Dich, mit konkreten Details
> dazu, an den Support des Herstellers dieses, ähm, Betrübssystems we=
nden.
Wieso? Die MySQL Software funktioniert nicht! Die macht irgendwas mit=20
der ipnat.sys was es nicht machen sollte, und abgesehen davon lässt sic=
h=20
der Service unter Win2003 sich nicht starten lässt (obwohl der mysql-nt=
=20
Prozess läuft, aber ich kann nicht drauf zugreifen, ich bekomme keine=20
Verbindung, und kann wegen dem ipnat.sys Problem auch nicht mehr die Win =
Firewall verändern).
Grüße
Andreas
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 11:30:59 von Sven Paulus
Axel Schwenke wrote:
> Mach also in deiner Original-Datenbank ein
> SELECT @x:=MAX() FROM
> UPDATE SET =@x+1 WHERE =0
Vielleicht besser dies, falls mehrere Zeilen den Wert 0 beinhalten:
SELECT @x:=MAX() FROM
UPDATE SET =@x:=@x+1 WHERE =0
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 11:38:19 von Axel Schwenke
Sven Paulus wrote:
> Axel Schwenke wrote:
>> Mach also in deiner Original-Datenbank ein
>> SELECT @x:=MAX() FROM
>> UPDATE SET =@x+1 WHERE =0
>
> Vielleicht besser dies, falls mehrere Zeilen den Wert 0 beinhalten:
>
> SELECT @x:=MAX() FROM
> UPDATE SET =@x:=@x+1 WHERE =0
Genau da war ich auch schon. Dann ist mir eingefallen, daß
AUTO_INCREMENT *immer* auch PRIMARY KEY ist. Es kann also
nur eine 0 geben.
XL
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 11:45:11 von Axel Schwenke
Andreas Korthaus wrote:
> Entweder der Hersteller sagt das Produkt läuft auf Windows,
> dann bitte auch ohne die Konflikte mit der Windows Firewall und dessen
> NAT-Implementierung, oder man lässt es ganz. MySQL (sowohl 3.23 als auch
> 4.1) macht irgendwas mit der ipnat.sys, dass das restliche Problem
> Schwierigkeiten bekommt.
Kann ich mir ehrlich gesagt nicht vorstellen. Andererseits ist die
Windows-Implementierung von Firewall und NAT vermutlich ähnlich
bizarr wie der der Rest des Systems.
Ich hatte MySQL auf W2K3 jedenfalls schon am Laufen. Allerdings weiß
ich nichts von einer Firewall oder NAT auf dem Windows-System.
>> Du solltest Dich, mit konkreten Details
>> dazu, an den Support des Herstellers dieses, ähm, Betrübssystems wenden.
> Wieso? Die MySQL Software funktioniert nicht! Die macht irgendwas mit
> der ipnat.sys was es nicht machen sollte, und abgesehen davon lässt sich
> der Service unter Win2003 sich nicht starten lässt (obwohl der mysql-nt
> Prozess läuft, aber ich kann nicht drauf zugreifen, ich bekomme keine
> Verbindung, und kann wegen dem ipnat.sys Problem auch nicht mehr die Win
> Firewall verändern).
Ich nehme an, du hast schon einen ausführlichen Bugreport auf
bugs.mysql.com eingekippt? Hint: was du hier geschrieben hast, war
*nicht* ausführlich genug.
XL
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 12:06:13 von akorthaus
Axel Schwenke schrieb:
> Anscheinend hast in einer Tabelle eine Zeile mit dem Wert 0 in einer
> AUTO_INCREMENT Spalte. Dieser Wert darf da aber nicht stehen! Beim
> Import wird aus 0 der nächste freie Wert, anscheinend 3114. Wenn dann=
> die "richtige" Zeile mit 3114 kommt, knallt es.
Tatsächlich, dieser Datensatz ist bis auf die ID identisch zu dem mit=20
der ID 3114. Keine Ahnung wo der herkommt, ob es ein Problem beim Export =
war, vermutlich ist das Problem schon früher durch einen Bug entstanden=
Vielen Dank für den Hinweis, jetzt geht alles wieder (zumindest auf=20
WinXP...)!
> Noch was: die Migration pre-4.1 auf 4.1+ hat ein paar Tücken. Lies de=
n
> "Upgrading MySQL" Abschnitt des Handbuchs. Gerade bei diesem Upgrade
> ist es wünschenswert, das 4.1+ mysqldump zum Dumpen zu verwenden.
Hm, mal sehen, mache ich vielleicht noch, hatte die Daten (vom mysqldump =
3.23) als latin1 importiert, aber trotzdem scheint es ein Problem mit=20
dem Zeichensatz zu geben (über ODBC).
> Noch einfacher ist es, das $DATADIR einfach weiter zu verwenden. Den
> Dump macht man dann nur zur Sicherheit.
Aber das Datadir von 3.23 passt doch nicht mehr, oder?
Viele Grüße und Danke nochmal,
Andreas
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 12:13:41 von Sven Paulus
Axel Schwenke wrote:
> Genau da war ich auch schon. Dann ist mir eingefallen, daß
> AUTO_INCREMENT *immer* auch PRIMARY KEY ist. Es kann also
> nur eine 0 geben.
Stimmt, beim Erstellen des Dumps war's ja auch schon PRIMARY KEY,
hast recht.
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 13:15:15 von Christian Kirsch
Andreas Korthaus wrote:
> Axel Schwenke schrieb:
>
>
>>Anscheinend hast in einer Tabelle eine Zeile mit dem Wert 0 in einer
>>AUTO_INCREMENT Spalte. Dieser Wert darf da aber nicht stehen! Beim
>>Import wird aus 0 der nächste freie Wert, anscheinend 3114. Wenn dann
>>die "richtige" Zeile mit 3114 kommt, knallt es.
>
>
> Tatsächlich, dieser Datensatz ist bis auf die ID identisch zu dem mit
> der ID 3114. Keine Ahnung wo der herkommt, ob es ein Problem beim Export
> war, vermutlich ist das Problem schon früher durch einen Bug entstanden.
>
> Vielen Dank für den Hinweis, jetzt geht alles wieder (zumindest auf
> WinXP...)!
>
>
>>Noch was: die Migration pre-4.1 auf 4.1+ hat ein paar Tücken. Lies den
>>"Upgrading MySQL" Abschnitt des Handbuchs. Gerade bei diesem Upgrade
>>ist es wünschenswert, das 4.1+ mysqldump zum Dumpen zu verwenden.
>
>
> Hm, mal sehen, mache ich vielleicht noch, hatte die Daten (vom mysqldump
> 3.23) als latin1 importiert, aber trotzdem scheint es ein Problem mit
> dem Zeichensatz zu geben (über ODBC).
>
>
>>Noch einfacher ist es, das $DATADIR einfach weiter zu verwenden. Den
>>Dump macht man dann nur zur Sicherheit.
>
>
> Aber das Datadir von 3.23 passt doch nicht mehr, oder?
>
Doch. Deshalb hat Axel das auch geschrieben. Ich habe schon seit Jahren
nur noch aus Sicherheitsgründen einen mysqldump vor den Upgrades
gemacht. Einspielen musste ich den nie.
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 13:24:31 von Axel Schwenke
Andreas Korthaus wrote:
> Axel Schwenke schrieb:
>
>> Noch was: die Migration pre-4.1 auf 4.1+ hat ein paar Tücken. Lies den
>> "Upgrading MySQL" Abschnitt des Handbuchs. Gerade bei diesem Upgrade
>> ist es wünschenswert, das 4.1+ mysqldump zum Dumpen zu verwenden.
>
> Hm, mal sehen, mache ich vielleicht noch, hatte die Daten (vom mysqldump
> 3.23) als latin1 importiert, aber trotzdem scheint es ein Problem mit
> dem Zeichensatz zu geben (über ODBC).
Deswegen sollst du das Handbuch lesen. Und danach gleich noch das
Archiv dieser Newsgroup. Stichworte: Umlaute, Upgrade, 4.1
>> Noch einfacher ist es, das $DATADIR einfach weiter zu verwenden. Den
>> Dump macht man dann nur zur Sicherheit.
>
> Aber das Datadir von 3.23 passt doch nicht mehr, oder?
MyISAM mit Sicherheit, InnoDB könnte Probleme machen. Eventuell muß man
Indizes neu bauen, wenn man an den Character-Encoding-Defaults spielt.
Steht aber *alles* auch im Manual.
XL
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 07.03.2006 13:30:00 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Kann mysql dump nicht importieren: auto_increment Problem
am 09.03.2006 01:33:10 von akorthaus
Hallo
Andreas Kretschmer schrieb:
>> 4.1) macht irgendwas mit der ipnat.sys, dass das restliche Problem=20
>> Schwierigkeiten bekommt.
>=20
> Ohne MySQL jetzt sonderlich loben zu wollen, aber hier muß ich es
> verteitigen. Das ist, sorry, Dummfug.
Das ist halt die Fehlermeldung, die Windows anzeigt.
>> Enterprise Server" die ich bisher gesehen habe. Linux macht für mich=
nur=20
>> so lange Sinn, wie ich mit den Programmen auskomme, die hier besonders=
=20
>> gut sind. Als Haupt-Server für ein kleines/reines Windows-Netzwerk i=
st=20
>=20
> Ach so. Du bist also der Meinung, Windows in Verbindung mit MySQL sei
> als Hauptserver inclusive Firewall und NAT besonders gut geeignet?
> Hey, das ist lustig ;-)
Der Rechner ist durch eine externe Firewall vom Internet getrennt, aber=20
nicht vom LAN. NAT macht er nicht, zumindest nicht für=20
Internet-Verbindungen der Client-Rechner. Für MySQL würde ich am=20
liebsten einen dedizierten Linux-Server einsetzen, lohnt sich in diesem=20
Fall allerdings einfach nicht.
Aber ich habe ehrlich gesagt auch keine große Lust hier die=20
Server-Konfiguration für ein kleines LAN zu rechtfertigen... Ich habe=20
hier lediglich eine Windows-Fehlermeldung wiedergegeben.
> Ich weiß, aber ich will jetzt nicht bashen.
Natürlich nicht...
Andreas