Hauptmenü

mySQL Backup und Restore

Begonnen von Hackstall, 29 Dezember 2020, 21:27:11

Vorheriges Thema - Nächstes Thema

Hackstall

Hallo,

ich habe noch eine Frage zu einem Vorgang (Backup und Restore von MYSQL Datenbanken).

A) Ich mache 1 mal wöchtentlich einen Backup von meiner DB mySQL. Dieser ist nunmehr 2 GByte gross.
Der Backup erzeugt eine SQL Datei <backup>.sql und wird via DBRep erstellt. Das läuft alles echt gut.

define DBLogging_DbRep DbRep DBLogging
setuuid DBLogging_DbRep 5c58b8f4-f33f-b8ba-48c6-72e41bda92a45bd4
attr DBLogging_DbRep DbLogExclude .*
attr DBLogging_DbRep DbLogInclude DumpRowsHistory
attr DBLogging_DbRep dumpDirLocal /opt/fhem/backup
attr DBLogging_DbRep dumpFilesKeep 1
attr DBLogging_DbRep event-on-update-reading state,DumpRowsHistory
attr DBLogging_DbRep executeAfterProc {qx (sudo -u root /opt/fhem/FHEM/mysql_backup_nuc.sh > /opt/fhem/backup/log_mysql.txt &)}
attr DBLogging_DbRep executeBeforeProc set DBLogging commitCache
attr DBLogging_DbRep group Grp-Backup
attr DBLogging_DbRep icon system_backup
attr DBLogging_DbRep optimizeTablesBeforeDump 1
attr DBLogging_DbRep room 9.8_Backup
attr DBLogging_DbRep timeout 7200
attr DBLogging_DbRep webCmd On:Off


B) Nun muss ich auf einen neuen Rechner umstellen würde gerne ein Restore machen.
Ich habe das auch schon ein bisschen gegoogelt und es wurde wohl empfholen dieses über:
mysql -u <user> -p fhem < <backupdb>.sql
zu machen.

Problem:
das Funktioniert aber irgendwie nicht:
1) Nachdem das db-log vermeintlich zurückgespult wurde kann ich via Sequel-Pro auf die Datenbank nicht zugreifen.
2) über mysql commandozeile werden aber Datensätze angezeigt. Komisch
3) Fhem (resp. smartVISU) plottet jedenfalls nur die gerade angelegten Datensätze. Nicht die alten in der DB vorrätigen.

Frage:
Gibt es einen Prozess über den ich am besten über FHEM Daten wieder importieren kann (vielleicht auch ohne eine Zwischenversion
anlegen zu müssten). Mir wäre auch egal wenn FHEM für die Zeit des Imports gestoppt werden müsste.
Danke für Eure Kommentare/Hilfen/Antworten.

Danke Andreas

DS_Starter

Hallo Andreas,

DbRep hat doch ein internes Kommando set <> restoreMySQL.
Damit sollte der Restore auf jeden Fall funktionieren.
Aber dran denken dass vohandene Datensätze in der neuen DB verloren gehen !

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Hackstall

Hallo Danke das hatte ich auch schon gesehen aber ich wusste nicht was man da eingeben muss.
Ist das der Absolute Pfad mit Dateinamen?

Danke Andreas

DS_Starter

Eigentlich nichts, weil es sich dort eine Drop-Down Liste öffnet mit den verfügbaren Backups.
Falls die Liste leer sein sollte prüfe bitte ob sich die Backup-Files im Verzeichnis des Attributs dumpDirLocal befinden.

Wenn das so ist, schau dir den Namen der Backup-Files an. Sie beginnen mit dem Namen der verbundenen Datenbank (siehe DbRep Internal DATABASE).
Wenn deine neue Datenbank anders heißt, benenne das File einfach um damit es gefunden wird.

Grüße,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Hackstall

#4
Danke,

habe das mal geprüft und einfach testhalber eine dummy FHEM installation genommen.
Have per DumpSQL gedumpt und das File wurde erzeugt im DumpDir Directory.

Wenn ich jetzt aber restoreSQL anwähle erscheint der Filename nicht sondern nur ein
Häckchen.

Was kann ma da machen?

Danke A. Krause

P.S. Was ist denn Server und ClientDB?
Ich betreibe mysql in einem eigenen Container via Docker?
Funktioniert das Restoresql dann ueberhaupt?

DS_Starter

Zitat
Ich betreibe mysql in einem eigenen Container via Docker?
Funktioniert das Restoresql dann ueberhaupt?
Ja, wüßte nicht warum es nicht gehen sollte.

ZitatWas ist denn Server und ClientDB?
Du meinst sicherlich  clientSide Dump und serverSide Dump.
Der Unterschied liegt im Verfahren, clientSide Dump liest mit Perl (also mit Hilfe DbRep/Device) die Daten aus der DB und schreibt sie in das Dumpfile weg. Beim serverSide Dump gibt DbRep dem MySQL Server nur die Anweisung einen Dump auszuführen und tut dann nichts mehr außer auf das Ende zu warten. Die Arbeit erledigt dann der MySQL Server.
Unterschiedliche Ansätze mit jeweiligen Vor/Nachteilen. Meistens ist das serverSide Dump besser weil deutlich schneller und das Ergebnis ausreichend. (commandref)

ZitatWenn ich jetzt aber restoreSQL anwähle erscheint der Filename nicht sondern nur ein
Häckchen.

Was kann ma da machen?
Das Device findet dann das Backupfile nicht.

Die Datei muß in jedem Fall für das Restore im Verzeichnis liegen, was im Attr dumpDirLocal  eingetragen ist.
Bei ist es wohl:


attr DBLogging_DbRep dumpDirLocal /opt/fhem/backup


Die Datei heißt immer <Datenbankname>_<Datum_Zeit>.sql (z.B. fhemtest_2020_12_30_09_47.sql). Bei Kompression entsprechend mit gzip hinten.

Wichtig ist dass <Datenbankname> mit dem Internal DATABASE im DbRep übereinstimmt (damit man nicht versehentlich falsche Daten importiert). Wenn der Name unterschiedlich ist weil man die neue DB z.B. umbenannt hat, mass man auch das File zum Restore umbenennen damit es akzeptiert wird.

LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter