software:tools:dbcopy
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:tools:dbcopy [2016/12/07 14:15] – [Konfiguration] tobiaslehr | software:tools:dbcopy [2021/05/06 12:35] (aktuell) – [Restore] Quellen stoppen jau | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== dbcopy - inkrementelle Datenbankkopie ====== | ====== dbcopy - inkrementelle Datenbankkopie ====== | ||
- | Möchte man die Datenbank sichern oder auf einem zweiten System zur Verfügung haben stößt man bei Verwendung von mysqldump auf Schwierigkeiten (Systemlast, | + | Möchte man die Datenbank sichern oder auf einem zweiten System zur Verfügung haben stößt man bei Verwendung von [[software/ |
- | Dbcopy ist Teil einer VZ-Standardinstallation und unter / | + | Dbcopy ist Teil einer VZ-Standardinstallation und unter '' |
- | Es hat aber sein eigenes [[https:// | + | |
- | Für das kopieren der Daten ist eine zweite, verfügbare Datenbankapplikation Grundvoraussetzung. Sie muss SQL-Kompatibel sein. Am zuverlässigsten ist daher eine weitere MySQL-Installation die über Netzwerkwerk erreichbar ist, z.B. bei einem Webhoster. | + | Für das kopieren der Daten ist eine zweite, verfügbare Datenbankapplikation Grundvoraussetzung. Sie sollte |
- | Alternativ bieten sich aber auch die DB eines NAS (z.B. Maria-DB auf Synology) oder SQLite an. SQLite ist als Backuplösung besonders interessant weil die Datenbank in einer einzelnen Datei abgelegt wird die einfach kopiert werden kann. | + | Alternativ bieten sich aber auch die DB eines NAS (z.B. Maria-DB auf Synology) oder SQLite an. SQLite ist als Backuplösung besonders interessant weil die Datenbank in einer einzelnen Datei abgelegt wird die einfach kopiert |
+ | Seit neustem kann man die Daten aber auch auf eine Influx-DB übertragen. | ||
===== Installation ===== | ===== Installation ===== | ||
In der Standardinstallation ist dbcopy über php direkt nutzbar. | In der Standardinstallation ist dbcopy über php direkt nutzbar. | ||
- | < | + | < |
+ | < | ||
Möchte man dbcopy von der Kommandozeile aus starten muss erst die Berechtigung gesetzt werden: | Möchte man dbcopy von der Kommandozeile aus starten muss erst die Berechtigung gesetzt werden: | ||
- | < | + | < |
Sollte dbcopy doch nicht auf dem System verfügbar sein kann das mit | Sollte dbcopy doch nicht auf dem System verfügbar sein kann das mit | ||
Zeile 19: | Zeile 20: | ||
nachgeholt werden. | nachgeholt werden. | ||
Um Einsatzbereitschaft herzustellen müssen die Abhängigkeiten aufgelöst werden | Um Einsatzbereitschaft herzustellen müssen die Abhängigkeiten aufgelöst werden | ||
- | < | + | < |
+ | sudo composer install</ | ||
==== MySQL ==== | ==== MySQL ==== | ||
Zeile 27: | Zeile 29: | ||
==== SQLite ==== | ==== SQLite ==== | ||
Kann auch als zweite Datenbankapplikation auf dem selben System installiert werden. | Kann auch als zweite Datenbankapplikation auf dem selben System installiert werden. | ||
- | < | + | < |
+ | |||
+ | ==== Influx ==== | ||
+ | Hier dient dbcopy allein der Konvertierung. Das Ziel wird hier in einem getrennte Abschnitt definiert und die Übertragung mit dem Schlüsselwort '' | ||
===== Konfiguration ===== | ===== Konfiguration ===== | ||
- | Es empfiehlt sich nicht die Konfigurationsdatei / | + | < |
- | < | + | Es empfiehlt sich nicht die Konfigurationsdatei |
+ | < | ||
Und | Und | ||
- | < | + | < |
- | <note important> | + | <note important> |
- | deshalb dhbcopy.php | + | Deshalb dbcopy |
- | < | + | |
- | " | + | |
- | // source database connection | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | },</ | + | |
- | Dies ist der Teil in dem der Zugang zur Quelldatenbank konfiguriert wird.\\ | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | Die Parameter host, user und password sind nur nötig wenn es sich um eine MySql Datenbank handelt | + | <file yaml /etc/dbcopy.yaml> |
- | <code> | + | # DATABASE DEFINITION |
- | | + | source: |
- | " | + | |
- | " | + | host: localhost |
- | " | + | user: vz |
- | " | + | password: |
- | " | + | dbname: |
- | " | + | |
- | },</ | + | |
- | Dies ist der Teil in dem der Zugang zur Ziel Datenbank konfiguriert wird. Hier handelt es sich um die selben parameter wie bei der Quell Datenbank, nur eben für die Zieldatenbank. Zusätzlich gibt es den Parameter\\ | + | target: |
- | "path": dieser ist nur notwendig wenn es sich um eine Sqlite Datenbank handelt und gibt an an welche Stelle die Datenbank Datei gesichert werden soll. | + | |
+ | host: localhost | ||
+ | user: root | ||
+ | password: raspberry | ||
+ | dbname: volkszaehler_backup | ||
+ | | ||
- | Auch hier gilt wieder, die Parameter host, user und password sind nur nötig wenn es sich um eine MySql Datenbank handelt | + | # influxdb |
- | < | + | influx: |
- | " | + | dsn: influxdb://localhost:8086 |
- | // table configuration (optional) | + | |
- | // ------------------------------ | + | |
- | // table name | + | |
- | // tables will be processed in the order they are mentioned: | + | |
- | // - foreign keys on target | + | |
- | // | + | |
- | // transfer mode | + | |
- | // skip: table will not be copied | + | |
- | // | + | |
- | // pk: selective copy by primary key. only data not present on target | + | |
- | | + | |
- | { | + | |
- | " | + | |
- | " | + | |
- | }, { | + | |
- | " | + | |
- | " | + | |
- | }, { | + | |
- | " | + | |
- | " | + | |
- | }, { | + | |
- | " | + | |
- | " | + | |
- | }, { | + | |
- | " | + | |
- | " | + | |
- | } | + | |
- | ] | + | |
- | }</ | + | |
+ | # TABLE DEFINITION | ||
+ | # ---------------- | ||
+ | # tables will be processed in the order they are mentioned: | ||
+ | # - foreign keys on target will be dropped | ||
+ | # - if a table is not listed here, it will not be touched | ||
+ | # transfer mode | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # will be copied from source. | ||
+ | tables: | ||
+ | entities: copy | ||
+ | properties: copy | ||
+ | entities_in_aggregator: | ||
+ | data: pk | ||
+ | aggregate: skip | ||
- | Dies ist der Bereich in dem festgelegt wird welche Tabellen wie gesichert | + | </ |
- | Möchten | + | |
+ | In der Datei werden | ||
+ | |||
+ | **driver: pdo_mysql**\\ | ||
+ | Die Schnittstelle zwischen PHP und der Datenbank. Standardmäßig läuft der Volkszähler mit einer MySQL-Datenbank (pdo_mysql), | ||
+ | |||
+ | **host: localhost**\\ | ||
+ | Die Host- oder IP-Adresse des Rechners auf dem die Datenbank läuft. Standardmäßig ist es das selbes System, daher localhost.\\ | ||
+ | |||
+ | **user: vz**\\ | ||
+ | Benutzername der Datenbank, für SQLite nicht nötig.\\ | ||
+ | |||
+ | **password: demo**\\ | ||
+ | Passwort des Benutzers der Datenbank, für SQLite nicht nötig.\\ | ||
+ | |||
+ | **dbname: volkszaehler**\\ | ||
+ | Name der Datenbank, für SQLite nicht nötig.\\ | ||
+ | |||
+ | **path: sqlite.db3**\\ | ||
+ | Name der Datei bei SQLite, für MySQL nicht nötig.\\ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Unter **"table"** wird definiert welche und wie die Tabellen der Datenbank gehandhabt werden.\\ | ||
+ | |||
+ | Vorne die Bezeichnung der einzelnen Tabellen. In der Beispielkonfiguration | ||
+ | Hinter dem Doppelpunkt die Aktion die jeweils ausgeführt werden soll\\ | ||
+ | |||
+ | **copy**\\ | ||
+ | Bedeutet die Tabelle | ||
+ | |||
+ | **pk**\\ | ||
+ | Die Tabelle im Ziel wird mit neuen Datensätzen | ||
+ | \\ | ||
+ | |||
+ | **skip**\\ | ||
+ | Datensätze der Tabelle werden nicht kopiert. Für Aggregationswerte ist es sinnvoller sie aus data neu zu generieren als die redundaten Daten nochmal zu speichern. Möchte | ||
===== Zieldatenbank erstellen ===== | ===== Zieldatenbank erstellen ===== | ||
- | < | + | < |
<note important> | <note important> | ||
===== Daten kopieren ===== | ===== Daten kopieren ===== | ||
- | < | + | < |
Erfolgreiche Kopie: | Erfolgreiche Kopie: | ||
< | < | ||
Zeile 123: | Zeile 143: | ||
==== Cronjob ==== | ==== Cronjob ==== | ||
Wenn die manuelle Kopie erfolgreich war kann ein cronjob eingerichtet werden. Z.B. täglich: | Wenn die manuelle Kopie erfolgreich war kann ein cronjob eingerichtet werden. Z.B. täglich: | ||
- | < | + | < |
+ | |||
+ | ===== Restore ===== | ||
+ | Um eine Sicherung wiederherzustellen eine Konfiguration anlegen bei der Ziel und Quelle vertauscht sind. Der User vz hat allerdings nicht genügend Rechte. \\ | ||
+ | Deshalb '' | ||
+ | |||
+ | Während des Restore dürfen auf keinen Fall neue Daten ankommen, das wird zu doppelte IDs und Abbruch führen. Daher alle Quellen stoppen die direkt oder indirekt auf die Datenbank zugreifen: Vzlogger, Scripte, ESP32, Cronjobs (aggregate), | ||
+ | Wenn beim Backup die Aggreagtionstabelle ausgelassen wurde sollte diese vor Inbetriebnahme der Cronjobs erstmals neu aufgebaut werden. | ||
+ | < | ||
+ | Das kann bei einer entsprechend großen Datenbank einige Stunden dauern und doppelte Ausführung des Sripts (per cron) würde zu Fehlern führen. |
software/tools/dbcopy.1481116536.txt.gz · Zuletzt geändert: 2016/12/07 14:15 von tobiaslehr