OBS/Admihilfe/MySQLShell: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
Die MySQL Shell ist ein CMD Tool, was in Zukunft auch das MySQLDump ersetzten wird.  
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
Die Shell muss über den MySQL Installer extra installiert werden.
{{Hinweis|Bitte immer die Version installieren, die auch die Datenbank hat.}}


[[Datei:MySQLShellInstall.png|rahmenlos]]


== Wofür ist die MySQL Shell gut? ==
== 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.
Die MySQL Shell ist sehr vielseitig, momentan wird sie aber nur für den Im- und Export von Datenbanken benutzt.
[[Image:MySQLShellDump.gif]]<br/>
===MySQL Shell Anleitungen===
[https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connection-using-parameters.html MySQL Shell mit Parametern verwenden]
<br/>
[https://dev.mysql.com/doc/mysql-shell/8.0/en/mysqlsh.html MySQL Shell Parameter Liste]


=== Datenexport mit der MySQL Shell ===
=== Datenexport mit der MySQL Shell ===
Zeile 15: Zeile 24:
# \connect root@"Servername" und danach das Passwort eingeben
# \connect root@"Servername" und danach das Passwort eingeben
# util.dumpSchemas(["Datenbankname"],"Zielpfad mit "/"", {showProgress: "true",threads:12, consistent:"false"})
# util.dumpSchemas(["Datenbankname"],"Zielpfad mit "/"", {showProgress: "true",threads:12, consistent:"false"})
{{Hinweis|Der Datenbankname muss case-sensitive eingegeben werden}}


Die Parameter bedeuten folgendes:
Die Parameter bedeuten folgendes:
Zeile 24: Zeile 35:
consistent → entpsricht dem Parameter "SingleTransaction" beim alten Dump. Sollte auf false stehen, wenn im laufenden Betrieb genutzt
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"})
{{Hinweis|Auf dem FTP liegt unter ''/private/SUPPORT/Batchdateien/MySQLShell_Export.bat'' eine Batch, mit der eine Datenbank gedumpt werden kann.}}
====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 })


Wenn die gesamte Datenbankinstallation gesichert werden soll, geht das mit folgenden Befehlen:
====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:


# \connect root@"Servername" und danach das Passwort eingeben
# \connect root@"Servername" und danach das Passwort eingeben
# util.dumpInstance("Zielpfad mit "/"", {showProgress: "true",threads:12, consistent:"false"})
# 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==
 
 
[[Datei:MySQLShellError Infile.png]]
 
=== Lösung: ===
Die globale Variable local_infile auf ON setzen: <syntaxhighlight lang="mysql">
SET GLOBAL local_infile = 'ON'
</syntaxhighlight>
 
== Dump wurde mit abweichender Version erstellt ==
[[Datei:MySQLShellError AbweichendeVersion.png]]
 
=== Lösung: ===
den Parameter <code>ignoreVersion:"true"</code> 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:
 
<code>util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "targetVersion":"8.0.27", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})</code>
 
 
Wenn alles gut läuft, sieht dies so aus:
 
[[Datei:MySQLShellError AbweichendeVersionLoesung.png]]

Aktuelle Version vom 13. Juni 2024, 13:48 Uhr

<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

MySQL Shell Anleitungen

MySQL Shell mit Parametern verwenden
MySQL Shell Parameter Liste

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"})
HINWEIS: Auf dem FTP liegt unter /private/SUPPORT/Batchdateien/MySQLShell_Export.bat eine Batch, mit der eine Datenbank gedumpt werden kann.

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