Bereits in der ORDIX News 3/2012 haben wir Ihnen gezeigt, wie man MySQL-Sandbox-Systeme aufbauen kann. Zu der damaligen Zeit gab es natürlich noch keine MySQL Shell. In vielen Fällen ist dieses nützliche Tool den DBAs noch unbekannt. Dabei ist es z.B. geeignet, um schnell Testumgebungen unterschiedlicher Couleur bereitzustellen.
Von Schaufeln und Förmchen: Was ist eine Sandbox und was macht die MySQL Shell?
Bevor wir Testumgebungen aufbauen, lassen Sie uns kurz über die Grundlagen sprechen. Eine Sandbox-Umgebung meint in diesem Fall eine isoliert laufende MySQL-Instanz mit unabhängigen Binaries, Datenbank- und Konfigurationsdateien. Eine solche Instanz kann vollkommen autark von anderen betrieben und beispielsweise gestartet und gestoppt werden.
Die MySQL Shell ist ein umfangreiches Client-Werkzeug, welches für unterschiedliche Zwecke genutzt werden kann. Es dient der Administration von Instanzen. So lassen sich beispielsweise Cluster- und Replikationslösungen hierüber aufbauen, steuern und monitoren. Es kann aber auch zur reinen Abfrage von Daten (SQL) genutzt werden. Zusätzlich kann es als Skripting-Schnittstelle (JS, Phython) verwendet werden, um beispielsweise eigene Reports zu implementieren. Darüber hinaus stehen diverse Helferlein und APIs bereit (z.B. der Upgrade Checker oder der JSON Importer), die einem DBA das Leben einfacher machen.
--> https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-features.html
Mein Sandkasten, dein Sandkasten...
Neben den oben genannten Möglichkeiten kann die Shell aber auch genutzt werden, um Testumgebungen bereitzustellen. Dies kann interaktiv in der Shell oder über Skript (JS) erfolgen:
Im oben gezeigten Beispiel wird eine neue Instanz mit dem Port 3399 ins Leben gerufen. Sämtliche Daten der Instanz liegen dabei unterhalb des folgenden (Sandbox-)Verzeichnisses "/opt/mysql/sand/3399".
Hier befinden sich alle Komponenten der Datenbank. Die Datenbank-Dateien ("/sandboxdata"), die Binaries ("/bin"), die Konfigurationsdatei ("my.cnf") und die Start- und Stopp-Skripte ("start.sh", "stop.sh").
Komplexere Lösungen (z.B. der Aufbau von zwei Instanzen) können über Skripte (z.B. in JS) gelöst werden:
Selbstverständlich können auch komplexere Strukturen wie z.B. Cluster- und Replikationslösungen auf diesem Wege erstellt werden Die notwendigen Kommandos (z.B. "dba.createCluster()") lassen sich nahtlos in solche Skripte integrieren.
Hier ein weiteres Beispiel zum Zerstören (Abbau) einer Sandbox:
Natürlich kann man dies wahlweise auch manuell und dialogorientiert erledigen.
Wohin mit all dem Sand?
Die MySQL Shell lässt sich umfangreich konfigurieren. Den aktuellen Konfigurationsstatus kann man über das folgende Kommando ermitteln.
Die Variable"sandboxDir" ist maßgeblich für diesen Blog. Sie definiert den physikalischen Speicherort unserer Sandbox-Instanzen. Natürlich kann dieser Wert verändert werden. Das Flag "--persist" sorgt dafür, dass die Einstellung persistent (also über eine MySQL-Shell-Session) hinaus geändert wird:
Fazit: Alles nur Spielerei?
Die MySQL Shell ist zum Aufbau von Testsystemen sehr nützlich. Der Aufbau von Sandboxen erfolgt schnell und gut strukturiert. Als DBA muss man lediglich die bereits vergebenen Ports im Auge behalten. In jedem Fall (auch über Sandboxen hinaus) lohnt es sich mit diesem Tool vertraut zu machen.
Sie haben Fragen rund um den Betrieb von MySQL Datenbanken? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren Seminaren