Raus aus der Komfortzone: Linux, PowerShell und MySQL
Manchmal ist es an der Zeit, etwas Neues zu probieren. Seit fast zwanzig Jahren beschäftige ich mich mit MySQL Datenbanken. Dabei kommt bei mir (und unseren Kunden) fast ausschließlich Linux zum Einsatz. In diesem Umfeld wurden von mir ein paar Dutzend Skripte in Shell und/oder Perl zur Verwaltung oder zum Monitoring entwickelt und implementiert. So weit, so gut.
Die andere Welt da draußen
In den letzten Tagen hatte ich Kontakt mit einem Kunden, der aktuell seine Datenbanken auf einer Vielzahl von internen Windows-Servern verteilt hat. Im Rahmen einer neuen IT-Strategie sollen diese Systeme nun in die Cloud migriert und auch ein wenig konsolidiert werden. Auch hier existieren viele hilfreiche Skripte. Der größere Teil wurde mit der PowerShell implementiert. Die Frage des Kunden lautet daher: Muss ich die nun alle neu implementieren oder kann ich diese weiter nutzen?
Mut zur Lücke
Bis zum heutigen Tage habe ich mich nicht wirklich tiefgehend mit der PowerShell beschäftigt. Allerdings ist mir bekannt, dass die PowerShell auch für Windows-fremde Systeme wie Linux und den Mac verfügbar ist. Genutzt habe ich das allerdings nie. Zeit dies zu ändern!
Ein Selbstversuch in drei Akten
Es folgt also ein Selbstversuch (unter Zeitdruck), wie und ob man mit der PowerShell unter Linux und MySQL arbeiten kann. Zeit die Stoppuhr zu starten:
Akt 1: Powershell Installation (00 Min. 00 Sek.)
Mein Versuchsobjekt ist ein Ubuntu 18.04 Server mit einer MySQL 8.0.19 DB. Der erste Akt ist auch wieder schnell vorbei und besteht nur aus zwei Kommandos:
- Download der Software
- Installation der Software
bash> wget https://github.com/PowerShell/PowerShell/releases/download/v6.2.3/powershell_6.2.3-1.ubuntu.18.04_amd64.deb bash> dpkg -i powershell_6.2.3-1.ubuntu.18.04_amd64.deb
Zusätzlich wird noch der MySQL Connector/NET benötigt, um mit der Datenbank kommunizieren zu können.
bash> wget https://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-8.0.19-noinstall.zip
Akt 2: Skripting (12 Min. 30 Sek.)
Ok, hier habe ich geschummelt. Da ich keine PowerShell Skills habe, habe ich mir im Internet einige Tutorials und Vorlagen angeschaut, um schnell ein Ergebnis zu bekommen. In diesem Moment geht es mir auch nicht darum ein perfektes, möglichst elegantes und effizientes Skript zu schreiben, sondern lediglich um einen funktionalen Test. Mein Ziel: Das Ergebnis eines einfachen SELECTs auf STDOUT auszugeben:
# Import MySQL functions Add-Type -Assembly /Users/mj/pwsh/mysql-connector-net-8/v4.8/MySql.Data.dll # Connect to remote MySQL server $db_con = New-Object MySql.Data.MySqlClient.MySqlConnection $db_con.ConnectionString = "server=192.168.56.101;port=3310;uid=root;pwd=root;database=mysql" $db_con.Open() # Execute MySQL SQL command $sql = New-Object MySql.Data.MySqlClient.MySqlCommand $sql.CommandText = "select user, host from user" $sql.Connection = $db_con $sql.Prepare() $data = $sql.ExecuteReader() # Present data to STDOUT While ($data.Read()) { [PSCustomObject]@{ $data.GetName(0) = $data.GetValue(0) $data.GetName(1) = $data.GetValue(1) } } $db_con.close()
Im ersten Abschnitt wird der Funktionsumfang der PowerShell um MySQL Funktionen erweitert. Dazu wird die entsprechende runtergeladene DLL des Connectors eingebunden. Danach wird die Verbindung zur DB aufgebaut. Im nächsten Abschnitt wird das SQL-Kommando an den Server gesendet und das Ergebnis entgegengenommen. Im letzten Schritt wird über das Ergebnis zeilenweise iteriert und die Datensätze werden auf STDOUT ausgegeben.
Akt 3: Testen ( 42 Min. 30 Sek.)
Das Skript funktioniert tadellos.
bash> pwsh mysql.ps user host ---- ---- backup % blog localhost mj localhost mysql.infoschema localhost mysql.session localhost mysql.sys localhost root localhost ...
Beflügelt von dem Ergebnis habe ich mir ebenfalls eine PowerShell Umgebung auf meinem Macbook installiert (siehe unten) und das identische Skript (Pfadangabe zur DDL musste angepasst werden) erneut getestet. Auch hier lief das Skript sorgenfrei (48 Min 00. Sek).
bash> brew cask install powershell
Fazit
Das Ergebnis überzeugt und wird sicherlich unseren Kunden erfreuen. Generell ist es problemlos möglich, mit der PowerShell Skripte in heterogenen Umgebungen (Windows/Linux) zu entwickeln und zu betreiben. Die PowerShell ist sicher auch ein mächtiges Werkzeug (der Name legt dieses ja nah ;-)). Ich werde mich daher in naher Zukunft mehr damit beschäftigen und dieses Tool vielleicht auch häufiger einsetzen.
Sie haben Fragen zur PowerShell und/oder dem Betrieb von MySQL Datenbanken? Dann sprechen Sie mit uns oder besuchen Sie unsere Kurse:
Windows PowerShell für Administratoren MySQL Administration
Principal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare