Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:tools:dbcopy

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
software:tools:dbcopy [2019/06/30 09:32]
jau Schlüsselwort copy
software:tools:dbcopy [2019/07/07 15:52] (aktuell)
jau An aktuellen Softwarestand angepasst
Zeile 1: Zeile 1:
 ====== dbcopy - inkrementelle Datenbankkopie ====== ====== dbcopy - inkrementelle Datenbankkopie ======
-<​note>​Der Artikel beschreibt die Version von dbcopy wie sie mit dem aktuellen Image ausgeliefert wird. Es gibt zwischenzeitlich eine neuere Version die sich im Detail unterscheidet.</​note>​+
 Möchte man die Datenbank sichern oder auf einem zweiten System zur Verfügung haben stößt man bei Verwendung von [[software/​middleware/​datenbank#​komplettbackup_mit_mysqldump|mysqldump]] auf Schwierigkeiten (Systemlast,​ Zeitprobleme des vzlogger) die mit dbcopy umgangen werden können. Möchte man die Datenbank sichern oder auf einem zweiten System zur Verfügung haben stößt man bei Verwendung von [[software/​middleware/​datenbank#​komplettbackup_mit_mysqldump|mysqldump]] auf Schwierigkeiten (Systemlast,​ Zeitprobleme des vzlogger) die mit dbcopy umgangen werden können.
  
-Dbcopy ist Teil einer VZ-Standardinstallation und unter /​var/​www/​volkszaehler.org/​vendor/​bin/​ zu finden. Es hat sein eigenes [[https://​github.com/​andig/​dbcopy|Repository auf github]]. Die Kopie ist in der Standardinstallation unter /​var/​www/​volkszaehler.org/​vendor/​andig/​dbcopy/​ abgelegt.+Dbcopy ist Teil einer VZ-Standardinstallation und unter ''​/​var/​www/​volkszaehler.org/​vendor/​bin/​'' ​zu finden. Es hat sein eigenes [[https://​github.com/​andig/​dbcopy|Repository auf github]]. Die Kopie ist in der Standardinstallation unter ''​/​var/​www/​volkszaehler.org/​vendor/​andig/​dbcopy/​'' ​abgelegt.
  
-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 ​SQL-Kompatibel sein. Am zuverlässigsten ist daher eine weitere MySQL-Installation die über Netzwerkwerk erreichbar ist, z.B. bei einem Webhoster.\\ 
-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 (Voll-Backup) 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 (Voll-Backup) werden kann.\\ 
 +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.
-<​code>​php /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​backup</​code>​ +<​code>​php /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​copy</​code>​ 
-<​note>​In ​der aktuellen Version wurde das Schlüsselwort ''​backup'' ​durch ''​copy'' ​ersetzt.</​note>​+<​note>​In ​älteren Versionen lautet ​das Schlüsselwort ''​backup'' ​statt ''​copy''​.</​note>​
 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:
 <​code>​sudo chmod +x /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy</​code>​ <​code>​sudo chmod +x /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy</​code>​
Zeile 29: Zeile 30:
 Kann auch als zweite Datenbankapplikation auf dem selben System installiert werden. Kann auch als zweite Datenbankapplikation auf dem selben System installiert werden.
 <​code>​sudo apt-get install sqlite3 php5-sqlite</​code>​ <​code>​sudo apt-get install sqlite3 php5-sqlite</​code>​
 +
 +==== Influx ====
 +Hier dient dbcopy allein der Konvertierung. Das Ziel wird hier in einem getrennte Abschnitt definiert und die Übertragung mit dem Schlüsselwort ''​influx''​ angestoßen.
  
 ===== Konfiguration ===== ===== Konfiguration =====
-<​note>​In ​der aktuellen Version ist die Konfiguration nicht mehr ''​dbcopy.json''​ sondern ''​dbcopy.yml''​. Die Syntax ist anders, der Inhalt aber identisch.</​note>​ +<​note>​In ​älteren Versionen lautete ​die Konfigurationsdatei ​''​dbcopy.json''​. Die Syntax ist anders, der Inhalt aber nahezu ​identisch.</​note>​ 
-Es empfiehlt sich nicht die Konfigurationsdatei /​var/​www/​volkszaehler.org/​misc/tool/dbcopy.json direkt zu ändern. Das kann bei späteren Updates der Middleware zu Problemen führen. Daher: +Es empfiehlt sich nicht die Konfigurationsdatei ​''​/​var/​www/​volkszaehler.org/​etc/dbcopy.dist.yaml'' ​direkt zu ändern. Das kann bei späteren Updates der Middleware zu Problemen führen. Daher: 
-<​code>​sudo cp /​var/​www/​volkszaehler.org/​etc/​dbcopy.json /​etc/​dbcopy.json</​code>​+<​code>​sudo cp /​var/​www/​volkszaehler.org/​etc/​dbcopy.dist.yaml ​/​etc/​dbcopy.yaml</​code>​
 Und Und
-<​code>​sudo nano /​etc/​dbcopy.json</​code>​+<​code>​sudo nano /​etc/​dbcopy.yaml</​code>​
 <note important>​Wenn nicht explizit angegeben verwendet dbcopy die Konfiguration aus dem eigenen oder aktuellen Verzeichnis!\\ <note important>​Wenn nicht explizit angegeben verwendet dbcopy die Konfiguration aus dem eigenen oder aktuellen Verzeichnis!\\
 Deshalb dbcopy mit dem Parameter -c aufrufen.</​note>​ Deshalb dbcopy mit dem Parameter -c aufrufen.</​note>​
  
-<​file ​json dbcopy.json+<​file ​yaml /etc/dbcopy.yaml
-{ +# DATABASE DEFINITION 
- "source"{ +source: 
- "driver""pdo_mysql", +  driver: pdo_mysql 
- "host""localhost", +  host: localhost 
- "user""vz", +  user: vz 
- "password""demo", +  password: demo 
- "dbname""volkszaehler" +  dbname: volkszaehler 
- }, + 
- "target"{ +target: 
- "driver""pdo_sqlite", +  driver: pdo_sqlite 
- "host""localhost", +  host: localhost 
- "user""root", +  user: root 
- "password""raspberry", +  password: raspberry 
- "dbname""volkszaehler_backup", +  dbname: volkszaehler_backup 
- "path""sqlite.db3" +  path: sqlite.db3 # path is only used if driver = pdo_sqlite 
- }, + 
- "​tables"​[ +# influxdb target database connection 
- { +influx
- "​name"​"​entities",​ +  dsn: influxdb://​localhost:​8086 
- "​mode"​"​copy"​ +  ​dbnamevolkszaehler 
- }, { +  ​measurementdata 
- "​name"​"​properties"​+ 
- "mode""copy" +# TABLE DEFINITION 
- }, { +# ---------------- 
- "​name"​"​entities_in_aggregator",​ +# tables will be processed in the order they are mentioned: 
- "​mode"​"copy" +# - foreign keys on target will be dropped 
- }, { +# - if a table is not listed hereit will not be touched 
- "​name"​"data", +# transfer ​mode 
- "​mode"​"pk" +# skip: table will not be copied 
- }, { +# copy: entire table will be truncated on target and copied from source 
- "​name":​ "aggregate", +# pk: selective copy by primary key. only data not present on target 
- "​mode"​"skip+# will be copied from source. 
-+tables
- ] +  ​entities: copy 
-}+  ​properties:​ copy 
 +  ​entities_in_aggregatorcopy 
 +  ​data: pk 
 +  aggregate: skip 
 </​file>​ </​file>​
  
 In der Datei werden Quelle (**"​source"​**) und kurz darunter Ziel (**"​target"​**) festgelegt. Im folgenden sind die einzelnen Parameter erklärt:\\ In der Datei werden Quelle (**"​source"​**) und kurz darunter Ziel (**"​target"​**) festgelegt. Im folgenden sind die einzelnen Parameter erklärt:\\
  
-**"driver""pdo_mysql",**\\+**driver: pdo_mysql**\\
 Die Schnittstelle zwischen PHP und der Datenbank. Standardmäßig läuft der Volkszähler mit einer MySQL-Datenbank (pdo_mysql),​ in der Beispielkonfiguration ist eine SQLite-Datenbank als Ziel vorgesehen, dementsprechend ist eine andere Schnittstelle nötig (pdo_sqlite).\\ Die Schnittstelle zwischen PHP und der Datenbank. Standardmäßig läuft der Volkszähler mit einer MySQL-Datenbank (pdo_mysql),​ in der Beispielkonfiguration ist eine SQLite-Datenbank als Ziel vorgesehen, dementsprechend ist eine andere Schnittstelle nötig (pdo_sqlite).\\
  
-**"host""localhost",**\\+**host: localhost**\\
 Die Host- oder IP-Adresse des Rechners auf dem die Datenbank läuft. Standardmäßig ist es das selbes System, daher 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"**\\+**user: vz**\\
 Benutzername der Datenbank, für SQLite nicht nötig.\\ Benutzername der Datenbank, für SQLite nicht nötig.\\
  
-**"password""demo"**\\+**password: demo**\\
 Passwort des Benutzers der Datenbank, für SQLite nicht nötig.\\ Passwort des Benutzers der Datenbank, für SQLite nicht nötig.\\
  
-**"dbname""volkszaehler"**\\+**dbname: volkszaehler**\\
 Name der Datenbank, für SQLite nicht nötig.\\ Name der Datenbank, für SQLite nicht nötig.\\
  
-**"path""sqlite.db3",**\\+**path: sqlite.db3**\\
 Name der Datei bei SQLite, für MySQL nicht nötig.\\ Name der Datei bei SQLite, für MySQL nicht nötig.\\
  
Zeile 101: Zeile 109:
 Unter **"​table"​** wird definiert welche und wie die Tabellen der Datenbank gehandhabt werden.\\ Unter **"​table"​** wird definiert welche und wie die Tabellen der Datenbank gehandhabt werden.\\
  
-**"​name":​ "​entities"​**\\ +Vorne die Bezeichnung der einzelnen Tabellen. In der Beispielkonfiguration sind bereits alle Tabellen einer Volkszähler-Datenbank aufgeführt.\\ 
-Die Bezeichnung der einzelnen Tabellen. In der Beispielkonfiguration sind bereits alle Tabellen einer Volkszähler-Datenbank aufgeführt.\\+Hinter dem Doppelpunkt die Aktion die jeweils ausgeführt werden soll\\
  
-**"​mode":​ "copy"**\\+**copy**\\
 Bedeutet die Tabelle in der Ziel-Datenbank wird geleert und aus der Quelle neu beschrieben. Ein derart kopierte Tabelle ist keine "​echtes"​ Backup!\\ Bedeutet die Tabelle in der Ziel-Datenbank wird geleert und aus der Quelle neu beschrieben. Ein derart kopierte Tabelle ist keine "​echtes"​ Backup!\\
  
-**"​mode":​ "pk"**\\+**pk**\\
 Die Tabelle im Ziel wird mit neuen Datensätzen aus der Quelle ergänzt. Datensätze die in der Quelle gelöscht wurden bleiben im Ziel erhalten. Heißt aber auch das Änderungen an den Datensätzen nicht übernommen werden! Ist auf dem primären System [[howto/​datenmengen|vzcompress]] im Einsatz und auf dem sekundären System ebenfalls gewünscht, müsste das lokal wiederholt werden. Die Tabelle im Ziel wird mit neuen Datensätzen aus der Quelle ergänzt. Datensätze die in der Quelle gelöscht wurden bleiben im Ziel erhalten. Heißt aber auch das Änderungen an den Datensätzen nicht übernommen werden! Ist auf dem primären System [[howto/​datenmengen|vzcompress]] im Einsatz und auf dem sekundären System ebenfalls gewünscht, müsste das lokal wiederholt werden.
 \\ \\
  
-**"​mode":​ "skip"**\\+**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 man die Tabelle aggregate ebenfalls sichern "​skip"​ in "​pk"​ ändern.\\ 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 man die Tabelle aggregate ebenfalls sichern "​skip"​ in "​pk"​ ändern.\\
 ===== Zieldatenbank erstellen ===== ===== Zieldatenbank erstellen =====
Zeile 117: Zeile 125:
 <note important>​Das erzeugen von SQLite-Datenbanken schlug in einer alten Version fehl. Falls es Probleme gibt bitte die neuste Version aus den git holen.</​note>​ <note important>​Das erzeugen von SQLite-Datenbanken schlug in einer alten Version fehl. Falls es Probleme gibt bitte die neuste Version aus den git holen.</​note>​
 ===== Daten kopieren ===== ===== Daten kopieren =====
-<​code>/​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​backup ​-c /​etc/​dbcopy.json</​code+<​code>/​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​copy -c /​etc/​dbcopy.json</​code>​
-<​note>​In der aktuellen Version: ''/​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy copy -c /​etc/​dbcopy.json''</​note>+
 Erfolgreiche Kopie: Erfolgreiche Kopie:
 <​code>​entities:​ copying 9 rows (overwrite) <​code>​entities:​ copying 9 rows (overwrite)
Zeile 136: 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:
-<​code>​0 2 * * * /​usr/​bin/​php /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​backup ​-c /​etc/​dbcopy.json > /​dev/​null</​code>​ +<​code>​0 2 * * * /​usr/​bin/​php /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy ​copy -c /​etc/​dbcopy.json > /​dev/​null</​code>​ 
-<​note>​In der aktuellen Version: ''​0 2 * * * /​usr/​bin/​php /​var/​www/​volkszaehler.org/​vendor/​bin/​dbcopy copy -c /​etc/​dbcopy.json > /​dev/​null''</​note>​+
 ===== Restore ===== ===== Restore =====
 Um eine Sicherung wiederherzustellen einfach eine Konfiguration anlegen bei der Ziel und Quelle vertauscht sind. Das übrige Vorgehen ist identisch. Um eine Sicherung wiederherzustellen einfach eine Konfiguration anlegen bei der Ziel und Quelle vertauscht sind. Das übrige Vorgehen ist identisch.
software/tools/dbcopy.txt · Zuletzt geändert: 2019/07/07 15:52 von jau