Tag Archives: SQL

Suchen und ersetzen in SQL / mySQL Datenbanken

Heute war etwas Aufräumarbeit in der Blog-Datenbank angesagt. 🙂

Im speziellen ging es um die Ersetzung von Links auf den alten Webspace in den Beiträgen und noch ein paar andere kleinere Änderungen.

Fügt man in WordPress ein Bild ein, wir der Pfad nicht relativ zum Webspace sondern absolut gespeichert, also mit kompletter URL. Zieht man mit dem Blog über den Lauf der Jahre mehrfach um (so wie ich) und ändert evtl. noch die Domain des Blogs, entstehen so einige Karteileichen.

Hier mal ne kleine Anleitung, wie man die ungültigen Links auf die aktuelle Adresse umbiegt:

  1. Als erstes erstellt man ein Backup – das ist wirklich sehr wichtig! 🙂 Ich benutze dazu immer mysqldump Damit kann man den kompletten Inhalt einer Datenbank einfach in eine Datei “dumpen”:
    shell> mysqldump --all-databases -u$USER -p$PASSWORT > dump.sql
    Geht anschließend etwas schief, hat man ein Backup und kann darauf zurückgreifen. Das Backup kann man mit:
    shell> mysql < dump.sql
    wieder einspielen. Hat man beim Erstellen des Dumps eine spezielle Datenbank ausgewählt sollte man:
    shell> mysql $DB-NAME < dump.sql
    verwenden.
  2. Jetzt die eigentliche Aufgabe, suchen und ersetzen: Hier zu setzt man ein Konstrukt aus dem UPDATE und REPLACE Befehl ein, führt man hintereinander mehrere Ersetzungen durch ist der Feldname in der REPLACE-Funktion besonders tückisch, da man leicht vergisst ihn mitzuändern:
    mysql> UPDATE [table_name] SET [field_name] = REPLACE([field_name],'[string_to_find]','[string_to_replace]');
  3. Im Vorfeld sollte man natürlich auch per SELECT schauen, wie viele Datensätze man überhaupt ändern muss. Hier für ist LIKE ganz praktisch:
    mysql> SELECT * FROM [table_name] WHERE [field_name] like "%SUCHTEXT%";
  4. Das war’s!
  5. Kleiner Hinweise noch: Ich lösche immer noch die bash_history, wenn ich das mysql-Passwort per Befehl mitgebe. Man weiß ja nie…

Update auf WordPress Version 2.7

Seit gestern Abend arbeitet Version WordPress Version 2.7 unter der Haube der Homepage. Weshalb die Seite auch so komisch ausschaut und die Kommentare nicht angezeigt werden 🙁

Update1:  außer dem Problem mit der Kommentarfunktion, steht jetzt zusätzlich noch die Konvertierung der SQL-Datenbank von ISO-8859-1 auf UTF8 an, da die neue Version mit dem UTF8 Zeichensatz läuft. Das ist auch der Grund, warum ae: ä und ue: ü so seltsam angezeigt werden. 👿

Update2 21.12.08: Nach ewigem rumprobieren ist das UTF8-Problem gelöst. 🙂 Nachdem ich Stunden damit verbracht habe erst die SQL-Datenbank mit den ALTER TABEL und ALTER COLUMN Befehlen auf UTF8 umzustellen, sie dann mit dem Mysqldumper zu exportieren und mit dem Notepad die Umlaute wie z.B. ä, ö, ü und ß (was eigentlich ä,ü,ö,ß heißen soll) zu ersetzen, und wieder zu importieren, war ich fast am aufgeben… Außerdem habe ich mehrmals die ganze Datenbank geleert, WordPress neu installiert, geup- und downgraded, die ganze Sache noch mit dem altgedienten phpmyadmin ausprobiert und Unmengen an Zeit mit Recherche verbracht was allerdings alles nicht half.

Irgendwann habe ich dann gemerkt, dass ich vor mehr als einem Jahr beim letzten Update von Version 2.0 auf 2.3 einfach meine altes Configfile weiterverwendet hatte, ohne die neue Codierung in UTF8, welche eigentlich in 2.3 Pflicht war, zu berücksichtigen.

Ende vom Lied: Datenbank resettet, WordPress 2.5 mit korrektem config-file und utf8 installiert, damit die Datenbank neu in UTF8 erstellen lassen und dann mein Backup wieder importiert.

Danach habe ich dann WordPress Verision 2.7 installiert und jetzt sind auch die alten Posts wieder lesbar.