MySQL Search & Replace

Nach einer Migration von Windows AD auf Samba4 hatte ich eine DB, die noch mit vielen alten DNs bestückt war. Das lässt sich aber mit einem Query ganz bequem anpassen:

PHP/MySQL Wochentage

Da ich unser Rechnungssystem derzeit an unser Tiicket-System anknüpfe, hatte ich das “Problem”, dass die Wochentage der Aufwandsbuchungen in Englisch dargestellt wurden. Eigentlich nicht wirklich ein Problem, aber ich denke, dass ältere Semester besser damit zurecht kommen, wenn der Wochentag in deutsch angezeigt wird. Dazu muss im php-File eigentlich nicht viel gemacht werden. Folgender Eintrag reicht schon aus:

Damit wird aus

nun

Eigentlich nichts weltbewegendes, aber als Php-Laie wie mich doch gut zu wissen…

Postgres nach MySQL

Daten aus einer Postgres-Datenbank nach MySQL zu exportieren ist gar nicht mal so komplex. Vorausgesetzt ist hier, dass die Tabellen bereits auf der MySQL-Datenbank bestehen. Wenn dies der Fall ist, können explizit nur die Daten der Postgres-Datenbank exportiert werden. In diesem Dump sind dann ganz normale, nicht Postgres-spezifische, Anweisungen enthalten. In einem kompletten Dump ist das Anlegen der Datenbank usw. natürlich Postgres-spezifisch definiert, dort geht das ganze also nicht auf diese Weise…

Um also nur die Daten zu dumpen, reicht folgendes

Eventuell (jedenfalls bei mir war es so), muss trotzdem noch ein klein bisschen “Hand” angelegt werden (in meinem Fall war eine Column in Anführungszeichen, welche ich entfernen musste), dann kann der Dump aber wie gewohnt in MySQL importiert werden. Nach aber wenig manuellem Eingreifen hat das ganze recht gut geklappt.

Eine andere Variante wäre das Verwenden von Taps, was ich jedoch nicht kenne.

MySQL Dump in CSV

Und nochmals MySQL. Diesmal möchte ich Daten zwecks Umstellung auf ein anderes System in eine CSV exportieren. Einfach einen Query in ein File pipen ist zwar möglich, jedoch fehlen passt mir das ganze Bezüglich Formatierung nicht (Daten mit Tab getrennt). Ich möchte jedoch die Werte in Quotes und durch Komma getrennt.

Das File wird unter /var/lib/mysql// abgelegt.

Es geht natürlich auch direkt von der Konsole, hier kann zudem ein beliebiger Pfad gewählt werden

Im obigen Beispiel fehlen jedoch die Header (Tabellennamen), was aber oft oder meist benötigt wird.

Hierzu findet man einige Varianten. Eine davon ist das Auslesen der Header in eine weitere Datei und dann beide Dateien zusammenzufügen. Sowas wäre in etwa die entsprechende Abfrage:

‘”Mein Problem ist jedoch, dass ich gewisse Spalten beim Export zusammenfüge (zb. SELECT vorname, nachname AS fullname). Dann passen natürlich die Anzahl Zeilen hier nicht mehr. Irgenwie wirds mir hier zu blöd, um ellenlange Commands zu tippen oder Skripte hierfür zusammenzubasteln (Beispiele siehe u.a. hier). Ich pipe deswegen die Bildschirm-Ausgabe (welche die Header ja beinhaltet) in ein File und bastle dann halt den Header selbst zurecht… (erste Zeile kopieren, in CSV einfügen und Quotes, Kommas setzen)

>

Wieso nicht gleich so ? Weil hier die leeren Spalte nicht angezeigt werden, sprich also auch nicht exportiert werden….

Dieses File kann dann zb mit sed zurechtgestutzt werden. Hier wird nur die erste Zeile mit head ausgegeben, alle Wörter mit sed in Anführungszeichen gesetzt (je nach dem muss das natürlich angepasst werden) und zu guter Letzt werden mit tr die Tabulatoren durch ein Komma ersetzt… geht wahrscheinlich auch mit einem einzelnen sed…aber dann kanns wahrscheinlich kein Mensch mehr lesen 😉

Das ganze kann natürlich bereits beim Export des Dumps gemacht werden

|head -n 1|sed ‘s/\([A-Za-z_]\+\)/”\1″/g’|tr -s “\t” “\,” >

Nun schauts ganz gut aus, jedoch ist der Header am Schluss des Files…nochmals umbauen..

Mein Fazit zum Ganzen: es wäre angenehm, wenn man direkt definieren könnte, ob die Header mitexportiert werden sollen, würde das ganze wesentlich bequemer machen…

MySQL Dump mit UTF-8

Letztens hatte ich das Problem, dass ein MySQL-Dump erstellt wurde, welcher Umlaute enthalten hat. Beim Import des Dumps wurden diese aber mal wieder “zerhackt. Um dieses Problem zu umgehen, gibt es verschiedene Lösungen (siehe zb. auch diesen Post), die mir auf die Schnelle am bequemsten fand ich, im Dump anzugeben, dass er gefälligst UTF-8 verwenden soll…

MySQL Datenstruktur exportieren

Gestern stand ich vor der Frage, wie ich aus einer Datenbank nur die Struktur, also alle Tabellen ohne Daten exportieren kann. Eigentlich ganz einfach – identisch mit einem ganz normalen Dump, bis auf die -d Option, die bewirkt, dass keine Daten exportiert werden:

MySQL Query aus CLI

Gibts ja immer wieder mal, dass man nur schnell eine Abfrage machen will und es soll schnell gehen. Und jedes mal muss ich wieder googeln, obwohl die Abfrage doch eigentlich nichts spezielles ist. Naja, drum kommts jetzt hier in den Blog… ;-)

Ich hab immer noch einen Strichpunkt nach der Abfrage angehängt, obwohl das gar nicht nötig ist. Macht man auch nur einen Query, ist das völlig egal. Will man’s aber redirecten, bleibt das File leer… als korrektes Beispiel: