horald
Anmeldungsdatum: 6. Januar 2011
Beiträge: 240
Wohnort: Köln
|
Hallo Leute, ich versuche mit einem mysqldump meine Wiki-Datenbank zu sichern:
mysqldump -u dbuser -p --skip-set-charset --default-character-set=utf8 --xml dbmywiki | gzip > /var/www/html/daten/backup/dbmywiki_backup.xml.gz Jedesmal, wenn ich dann versuche mit dem Internavigator darauf zuzugreifen bekomme ich eine Fehlermeldung:
| XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: file:///var/www/html/daten/backup/dbmywiki_backup.xml
Zeile Nr. 36, Spalte 75:
<field Field="ar_timestamp" Type="binary(14)" Null="NO" Key="" Default="
|
Es sollte auf jedenfall xml sein, da ich es noch für andere Zwecke weiterverarbeiten möchte. Vielen Dank für Eure Tipps. Viele Grüße
Horst
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
horald schrieb: Jedesmal, wenn ich dann versuche mit dem Internavigator darauf zuzugreifen bekomme ich eine Fehlermeldung:
Hast du einen Link zu dem Programm? Wird der <field -Tag in den nachfolgenden Zeilen fortgesetzt?
|
horald
(Themenstarter)
Anmeldungsdatum: 6. Januar 2011
Beiträge: 240
Wohnort: Köln
|
Hallo seahawk1986, deine Antwort verstehe ich nicht. Es geht mir darum die Datenbank im xml-Format zu exportieren, damit ich sie in eine andere Datenbank wieder importieren kann und auch mit einem xml-Editor nachbearbeiten kann. Aber der mysqldump scheint ja schon eine fehlerhafte xml-Datei zu erzeugen, sonst würde der Internetnavigator ja kein Fehlermeldung auswerfen oder? Ich wollte diese riesige Datei nicht jedesmal von Hand korrigieren. Viele Grüße
Horst
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
horald schrieb:
deine Antwort verstehe ich nicht. [...] Aber der mysqldump scheint ja schon eine fehlerhafte xml-Datei zu erzeugen, sonst würde der Internetnavigator ja kein Fehlermeldung auswerfen oder?
Ich denke, der Kollege fragt, was "Internetnavigator" für ein Programm ist. Es wäre hilfreich das zu verstehen. Vielleicht gibt es ja eine Webseite, die Du verlinken kannst. Und bitte auch die zweite Frage beantworten: seahawk1986 schrieb:
Wird der <field -Tag in den nachfolgenden Zeilen fortgesetzt?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
horald schrieb: Internavigator
horald schrieb: Internetnavigator
Das war für mich aus der ersten vermurksten Variante nicht ganz klar, dass das ein Webbrowser sein soll... horald schrieb: Aber der mysqldump scheint ja schon eine fehlerhafte xml-Datei zu erzeugen, sonst würde der Internetnavigator ja kein Fehlermeldung auswerfen oder?
Der Hintergrund meiner Frage zu dem Rest des angefangenen <field Tag ist, dass es zwar die Empfehlung gibt Zeilenumbrüche in Attributen zu Spaces umzuformen, bevor die Daten von einem Programm validiert werden (was eventuell nicht jeder Browser so umsetzt), und der Standard das nicht explizit verbietet solche Zeichen einzubauen (https://www.w3.org/TR/REC-xml/#NT-AttValue). Was sagt ein "ordentlicher" XML-Validator wie xmllint zu der Datei?
|
homer65
Anmeldungsdatum: 8. November 2005
Beiträge: 548
Wohnort: bochum, germany
|
Ich glaube da geht etwas durcheinander. mysqldump dient dazu eine Sicherung zu machen, die mit mysql eingespielt werden kann.
Der Dump ist nicht dazu gedacht von anderen Programmen weiterverarbeitet zu werden.
Wenn du die Daten verarbeiten willst, warum nimmst du nicht eine vernünftige Programmiersprache und greifst direkt auf die Datenbank zu?
Alternativ kann man mit mysql auch select Befehle absetzen und die Ausgabe in eine Datei umlenken.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
homer65 schrieb: Ich glaube da geht etwas durcheinander. mysqldump dient dazu eine Sicherung zu machen, die mit mysql eingespielt werden kann.
Der Dump ist nicht dazu gedacht von anderen Programmen weiterverarbeitet zu werden.
Ich sehe nicht, dass da etwas durcheinander geht. Der Dump mit Option --xml ist laut Manpage "well-formed XML". Also muss es auch jedes Programm lesen können, das XML verarbeiten kann.
|
horald
(Themenstarter)
Anmeldungsdatum: 6. Januar 2011
Beiträge: 240
Wohnort: Köln
|
Hallo Leute, ich habe mir jetzt xmlcopyeditor installiert und ich kann jetzt die Frage beantworten, ob die Field-Anweisung geschlossen wird: Ja, sie wird geschlossen. Das Problem ist wohl ein anderes, es werden NUL-Werte exportiert, wie kann ich das verhindern: | <field Field="ar_timestamp" Type="binary(14)" Null="NO" Key="" Default="NULNULNUL..." Extra="" Comment="" />
|
Den NUL-Bereich kann ich auch gar nicht aus dem Editor kopieren und habe ihn jetzt händisch eingesetzt, um den Fehler besser darzustellen. Viele Grüße
Horst
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Kannst du mal schauen, was da an Bytes für die NUL-Werte in der Datei stehen (z.B. mit einem Hex-Editor wie GHex)? Ich wüsste nicht, welchen Sinn das (aus Sicht der mysql-dump Entwickler) haben sollte auf den Export der NUL-Werte zu verzichten, die sind schließlich nötig, um die Datenbank aus der XML-Datei wieder aufbauen zu können.
|
horald
(Themenstarter)
Anmeldungsdatum: 6. Januar 2011
Beiträge: 240
Wohnort: Köln
|
Hallo seahawk1986, danke für die Rückmeldung. Ich habe es aufgegeben als xml zu exportieren. Ich mache es jetzt doch vorerst als sql-dump. Dort sieht man dann auch das eigentlich '\0' dadrin steht. Warum es bei xml zu NUL wird ist mir ein Rätsel. Vielleicht ein Bug, der noch nicht aufgefallen ist? Die Export-Funktion von Mediawiki erstellt ja auch xml's. Aber man kein Fullbackup machen um es dann über den Browser wieder zu importieren. Auf einem Remoteserver habe ich normalerweise keinen Zugriff auf die Terminalebene. Und da die Dateien größer sind als 2MB kann man sie auch nicht mit dem Adminer-Tool importieren. Viele Grüße
Horst
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
In XML-Dateien ist '\0' nicht erlaubt: Valid_characters_in_XML Note that the code point U+0000, assigned to the null control character, is the only character encoded in Unicode and ISO/IEC 10646 that is always invalid in any XML 1.0 and 1.1 document.
Also muss man einen Ersatz dafür nutzen. Auf die Schnelle habe ich aber nichts dazu gefunden, wie das in XML-Attributen aussieht (ich habe auch gerade kein Datenbank zum Herumspielen), daher hätte interessiert, ob das dann wirklich die Bytefolge für ein NUL aus ASCII-Zeichen oder etwas anderes steht, das der xmlcopyeditor nur so anzeigt.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
horald schrieb:
Ich habe es aufgegeben als xml zu exportieren.
Ohm, schade. Damit verpassen wir die Gelegenheit etwas zu lernen.
Ich mache es jetzt doch vorerst als sql-dump. Dort sieht man dann auch das eigentlich '\0' dadrin steht. Warum es bei xml zu NUL wird ist mir ein Rätsel.
NUL ist der Name des Zeichens \0 (null Byte). Das kannst Du in jeder ASCII-Tabelle nachlesen.
Vielleicht ein Bug, der noch nicht aufgefallen ist?
Das halte ich eher für unwahrscheinlich, denn der Export wird weder neu noch selten genutzt sein. Meine Theorie ist eher, dass Du vielleicht tatsächlich den Wert NUL in Deiner Datenbank hast und der XML-Export oder aber das verarbeitende Programm damit nicht gut umgeht. NUL fällt bei der normalen Ausgabe gar nicht unbedingt auf (s.u.). Ich habe mal auf http://sqlfiddle.com/ mit folgendem Schema und folgenden Abfragen herumgespielt: Schema
| create table t1 ( name varchar(100) not null );
insert into t1 values ( 'foo' ), ( 'bar' ), ( 'dummy' ), ( 'dum\0my' );
|
Abfragen
| select name, length(name) as len from t1;
select name, length(name) as len from t1 where name like '%\0%';
select count(name) from t1 where name like '%\0%';
|
Mit der zweiten und dritten Abfrage könntest Du ermitteln, ob Du Werte mit NUL hast.
Die Export-Funktion von Mediawiki erstellt ja auch xml's. Aber man kein Fullbackup machen um es dann über den Browser wieder zu importieren. Auf einem Remoteserver habe ich normalerweise keinen Zugriff auf die Terminalebene. Und da die Dateien größer sind als 2MB kann man sie auch nicht mit dem Adminer-Tool importieren.
curl wäre vielleicht auch noch eine Option, um Backup und Restore über eine Web-Schnittstelle zu erledigen. Hattest Du schon geschrieben, was xmllint sagt?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
seahawk1986 schrieb: In XML-Dateien ist '\0' nicht erlaubt: Valid_characters_in_XML
Wieder was gelernt! Danke! Ich habe noch eine Frage auf Stackoverflow gefunden.
Also muss man einen Ersatz dafür nutzen. Auf die Schnelle habe ich aber nichts dazu gefunden, wie das in XML-Attributen aussieht
Ich bisher auch nicht. Möglicherweise gibt es da keinen Standardweg in XML und mysqldump gibt auf und spuckt dann einfach NUL aus, wie es ist. Das hat zumindest den Vorteil, dass man merkt, dass es ein Problem gibt. Diese Zeichen will man vielleicht gart nicht in der DB haben oder es deutet auf einen fehlerhaften Client hin.
(ich habe auch gerade kein Datenbank zum Herumspielen), daher hätte interessiert, ob das dann wirklich die Bytefolge für ein NUL aus ASCII-Zeichen oder etwas anderes steht, das der xmlcopyeditor nur so anzeigt.
Ich würde mal mit hd oder od -t x1c oder od -t x1a die XML-Datei anzeigen, um sicher zu gehen. (Schnelltest: od -t a foo.xml | fgrep -cw nul )
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Ich würde auch mal in die Definition der Tabelle schauen, was da für ein Default-Wert für das Feld ar_timestamp gesetzt ist:
| DESCRIBE tabellen_name.datenbank_name ar_timestamp;
|
|