Tag Archives: mysql

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…

Umzug auf den neuen Server fast abgeschlossen

Wie man am Mangel von neuen Beitr├Ągen unschwer erkennen konnte, hatte ich seit letzten Herbst relativ wenig Zeit mich um dieses Projekt hier zu k├╝mmern, was sich jetzt aber hoffentlich wieder ├Ąndern wird.

Zudem kamen noch technische Probleme meines ehemaligen Hosters (FunPic), dessen Server chronisch ├╝berlastet waren und immer noch sind. Hierher r├╝hrten z.B. diese “no suitable nodes available to server your request”-Fehlermeldungen. Um Weihnachtszeit herum f├╝hrte dann ein Einspielen eines (defekten) Backups der Datenbank dazu, dass ich mich selbst aussperrte und nur noch per SQL-Befehl im phpmyadmin Beitr├Ąge h├Ątte schreiben k├Ânnen. Durch die st├Ąndigen Verbindungsabbr├╝che und die Server├╝berlastung begann ich mich dann nach einem neuen Hoster umzusehen.

Die Website l├Ąuft jetzt auf einem kleinen vServer von Netcup mit 333MHz, 100MB RAM und 4,3GB HDD in einem RAID 1, welcher leistungsm├Ą├čig wirklich an der untersten Grenze f├╝r eine dynamische Website ist. Auf dem vServer l├Ąuft Debian Lenny 64Bit mit mysql, php5-cgi und als Webserver lighttpd (lighty ausgesprochen). Das Angebot von Netcup war so ziemlich die g├╝nstigste M├Âglichkeit an einen (v)Server mit root-Zugriff zu kommen.

Was jetzt noch fehlt ist ein neues Theme f├╝r die Website, damit man hier optisch nicht mehr vom Standardtheme beleidigt wird und au├čerdem noch die Aktivierung von mod_rewrite, ein Modul f├╝r sch├Âne URLs (also nicht ?p=1231, sondern URLs mit z.B. dem Beitragstitel mit drin). Da WordPress in Bezug auf die rewrite-Regeln voll auf den ├╝blicherweise eingesetzten Apache angepasst ist, wird das noch ein bisschen gefrickel…

tl;dr: blog wieder online. ­čÖé