OBS/Admihilfe/MySQLShell

Aus OBS Wiki
Zur Navigation springen Zur Suche springen

<accesscontrol>Programmierer</accesscontrol>


Admin-Hilfe

OBS-Administration / Installation
OBS Umzug
Allgemein
kundenspezifische Anpassungen
OBS Protokolle

Was ist die MySQL Shell?

Die MySQL Shell ist ein CMD Tool, was in Zukunft auch das MySQLDump ersetzten wird.

Die Shell muss über den MySQL Installer extra installiert werden.

HINWEIS: Bitte immer die Version installieren, die auch die Datenbank hat.

MySQLShellInstall.png

Wofür ist die MySQL Shell gut?

Die MySQL Shell ist sehr vielseitig, momentan wird sie aber nur für den Im- und Export von Datenbanken benutzt.

MySQLShellDump.gif

Datenexport mit der MySQL Shell

Für den Export werden im Grunde nur 2 Befehle benötigt, nachdem man die Shell gestartet hat:

  1. \connect root@"Servername" und danach das Passwort eingeben
  2. util.dumpSchemas(["Datenbankname"],"Zielpfad mit "/"", {showProgress: "true",threads:12, consistent:"false"})
HINWEIS: Der Datenbankname muss case-sensitive eingegeben werden

Die Parameter bedeuten folgendes:

showProgress → lässt den Fortschritt im Fenster mitlaufen

threads → Anzahl der Threads die die Shell intern zum Dumpen nutzt

consistent → entpsricht dem Parameter "SingleTransaction" beim alten Dump. Sollte auf false stehen, wenn im laufenden Betrieb genutzt

Beispiel:

util.dumpSchemas(["obs_mysql"],"c:/Backup/DBDump", {showProgress: "true",threads:12, consistent:"false"})

Dump-Export, wenn der Name der Datenbank nachträglich geändert werden soll

Falls der Name des Dumps beim Import geändert werden soll, muss das Dump mit util.dumpTables statt mit util.dumpSchemas erzeugt werden. Hierbei werden die Tabellen einzeln gedumpt. Mit dem Parameter all kann man alle Tabellen eines Schemas dumpen. Beispiel:

util.dumpTables("obs_mysql", [], "c:/Backup/DBDumpTables", { "all": true })

Sichern einer kompletten Datenbankinstallation

Wenn die gesamte Datenbankinstallation gesichert werden soll, geht das mit dem Befehl util.dumpInstance. Beispiel:

util.dumpInstance("Zielpfad mit "/"", {showProgress: "true",threads:12, consistent:"false"})

Datenimport mit der MySQL Shell

Zuvor muss in der Datenbank die Variable "local_infile" aktiv sein. Sonst kann der Dump nicht eingelesen werden.

Um die Daten wieder zu importieren, müsst ihr diese Befehle nutzen:

  1. \connect root@"Servername" und danach das Passwort eingeben
  2. util.loadDump("Zielpfad mit "/"",,{progressFile :"Zielpfad mit "/""+backuplog.json",threads:12,backgroundThreads:12})

So wird die Daten unter dem Datenbanknamen eingespielt, wie Sie auch exportiert wurden.

Der "progressfile" Paramater legt eine Datei an, mit der das Dump den letzten Datensatz kennt, falls es abbricht. Somit wird an der Stelle wieder begonnen.

Beispiel:

util.loadDump("c:/Backup/DBDump",{progressFile :"c:/Backup/DBDump/backuplog.json", threads:12, backgroundThreads:12})

Import mit abweichendem Datenbank-Namen (vom Dump)

Falls ein Dump unter einem anderen Namen importiert werden soll kann hierfür der Parameter schema verwendet werden. Das entsprechende schema muss jedoch zunächst angelegt werden. Das Anlegen des Schemas kann über \sql erfolgen. Hierüber können direkte SQL Befehle eingegeben werden. Beispiel:

\sql CREATE DATABASE IF NOT EXISTS obs_mysql_backup;

Beispiel des Imports mit schema-Parameter:

util.loadDump("c:/Backup/DBDumpTables",{progressFile :"c:/Backup/DBDumpTables/backuplog.json", schema:"obs_mysql_backup",threads:12,backgroundThreads:12})

Bekannte Fehler

The local_infile' global system variable must be set to ON

MySQLShellError Infile.png

Lösung:

Die globale Variable local_infile auf ON setzen:

SET GLOBAL local_infile = 'ON'

Dump wurde mit abweichender Version erstellt

MySQLShellError AbweichendeVersion.png

Lösung:

den Parameter ignoreVersion:"true" hinzufügen.

Es kann hier natürlich zu diversen Problemen kommen. Laut MySQL Handbuch soll auf dem alten Server zunächst gepfürft werden, ob es zu Problemen kommen kann:

util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "targetVersion":"8.0.27", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})


Wenn alles gut läuft, sieht dies so aus:

MySQLShellError AbweichendeVersionLoesung.png