[vz-users] Hilfe bei Setup von dbcopy

Theo geocaching.theo at me.com
Wed Dec 7 12:39:41 CET 2016


Hallo Andreas,

Zum Thema Redundanz und Backup hab ich jetzt doch noch ein paar Fragen.

Du hast vor ein paar Tagen geschrieben das man die Tabellen entitites und properties extra sichern soll, da diese bei dbcopy immer überschrieben werden. Das heißt dann immer dann wenn ich irgendwelche Einstellungen an Kanälen ändere, neu Kanäle anlege etc, dann sollte man diese Tabellen sichern. Ich geh mal davon aus sowas kann man mit mysgldump machen, da werd ich mich mal schlau machen. Was mich interessieren würde, ist den die Tabelle Data sicher? Die wird ja inkrementell gesichert, also immer das was fehlt wird dazu geschrieben. Aber was passiert wenn jetzt durch welchen Grund auch immer im laufenden System die data Tabelle geleert wird und dann ein Backup läuft. löscht dan dbcopy auch das was in der gesicherten data Tabelle steht, oder schreibt es dann einfach nichts neues rein?

Wäre es dann besser die sqlite Datenbank von zeit zu Zeit zusätzlich zu sichern, so dass man mehrere Stände der Datenbank hat? Ich lass jetzt im moment jede Nacht dbcopy laufen, dies füllt mir die Sqlite Datenbank Datei. Jetzt würde ich z.b. einmal die Woche, oder einmal im Monat zusätzlich ein Script laufen, das mir die Sqlite Datenbank an einen Ort in ein Verzeichnis mit dem aktuellen Datum sichert. Somit hätte ich die immer aktuelle Datenbank und falls damit etwas schief geht eine Datenbank die dann eventuell eine Woche, oder einen Monat alt ist. So wäre dann der Datenverlust nicht so groß. Ausserdem könnte man somit auch den jeweiligen Stand der Tabellen Entitites und properties sichern, oder sollte das dann nochmal extra laufen?

Nicht das ihr mich jetzt falsch versteht, ich möchte keine scripte oder ähnliches um das durch zu führen, ich will einfach die Meinung von einem Fachmann der mir sagt ob das Sinn ergibt, oder eventuell overshootet ist.

Ih werd mich mal langsam ans wiki setzen, wenn ich mit dem restore weiter gekommen bin, dann werd ich das auch mal mit ins wiki packen.

Gruß Tobias
Am 07.12.2016 um 12:13 schrieb Andreas Goetz <cpuidle at gmail.com>:

> Hi,
> 
> 2016-12-06 23:30 GMT+01:00 Theo <geocaching.theo at me.com>:
> HAllo Andreas und Daniel,
> 
> ...
> 
> Zum WIki hat Daniel ja schon geantwortet- sehr gerne. 
> 
> Jetzt hab ich nur noch eine kurze Frage. Sollte ich jemals in die Verlegenheit kommen die Datenbank restoren zu müsssen, dann tausche ich die Bereiche target und source in der config einfach aus und lass es erst mit der option create laufen, damit die Datenbank erstellt wird und dann mit der option backup um die gesicherte Datenbank in die VZ datenbank einzuspielen?
> 
> Im Prinzip ja. Aber: was Du hast ist kein Backup!
> 
> Erstens hast Du immer nur eine Kopie der Datei- ist die kaputt weil beim Backup z.B: schon Daten gelöscht werden, hast DU auch kein Backup (siehe Posting von mir vor ein paar Tagen). Also Redundanz einbauen.
> 
> Zweitens muss ein Restore IMMER erprobt werden. Also setze DIr einfach eine zweite MySQL DB bzw. ein neues Schema auf und erprobe der Ablauf. Alles Andere gibt im Falle eines Restores nur Tränen (oder andere Fehler z.B. im dbcopy :O)
> 
> Ansonsten: schön dass Du motiviert bist Dich in die komplexe Materie einzuarbeiten. EInfach trauen, selbst recherchieren und die verbleibenden Fragen stellen.
> 
> 
> Gruß Tobias
> 
> Viele Grüße,
> Andreas
>  
> Am 06.12.2016 um 22:53 schrieb Andreas Götz:
> 
>> Ach Tobias,
>> 
>> Ein bisschen Kreativität: dann trag bei path doch einfach den kompletten Pfad ein statt nur des Dateinamens!
>> 
>> Viele Grüße, Andreas 
>> 
>> Am 06.12.2016 um 22:10 schrieb Theo <geocaching.theo at me.com>:
>> 
>>> keine Ahnung was da jetzt schief gelaufen ist, ich habs eben nochmal probiert, und jetzt hat es geklappt. habe aber ausser einem reboot sonst nichts geändert.
>>> 
>>> also scheint es jetzt zu laufen.
>>> 
>>> Allerdings habe ich noch eine Frage bezüglich des Speicherortes der sqlite datenbank. So wie ich es jetzt sehe, wird die Datenbank jetzt in /home/pi/backup gespeichert. ich würde die Datenbank aber gerne auf das gemountete Netzwerklaufwerk speichern, so muss ich sie nicht zusätzlich kopieren.
>>> 
>>> gruß tobias
>>> Am 06.12.2016 um 21:31 schrieb Theo:
>>> 
>>>> Hi,
>>>> 
>>>> also ich hab die dbcopy.json um die drei zeilen erleichtert und habe dbcopy upgedatet. Hab ich doch mit sudo git pull richtig gemacht, oder? composer sagte mir das nix zum installieren oder updaten da ist.
>>>> 
>>>> Aber ein erneutes erstellen der Zieldatenbank führte zu folgendem:
>>>> 
>>>> pi at raspberrypi:/var/www/volkszaehler.org/vendor/andig/dbcopy $ /var/www/volkszaehler.org/vendor/bin/dbcopy.php create -c /etc/dbcopy.json
>>>> Creating target schema
>>>> Creating tables
>>>> Updating schema assets for target platform compatibility: sqlite
>>>> table: aggregate
>>>> table: data
>>>> table: entities
>>>> table: entities_in_aggregator
>>>> table: properties
>>>> CREATE TABLE aggregate (id INTEGER NOT NULL, channel_id INTEGER NOT NULL, type BOOLEAN NOT NULL, timestamp BIGINT NOT NULL, value DOUBLE PRECISION NOT NULL, count INTEGER NOT NULL, PRIMARY KEY(id))
>>>> CREATE UNIQUE INDEX ts_uniq ON aggregate (channel_id, type, timestamp)
>>>> CREATE TABLE data (id INTEGER NOT NULL, channel_id INTEGER DEFAULT NULL, timestamp BIGINT NOT NULL, value DOUBLE PRECISION NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_ADF3F36372F5A1AA FOREIGN KEY (channel_id) REFERENCES entities (id) NOT DEFERRABLE INITIALLY IMMEDIATE)
>>>> CREATE UNIQUE INDEX data_unique ON data (channel_id, timestamp)
>>>> CREATE INDEX IDX_ADF3F36372F5A1AA ON data (channel_id)
>>>> CREATE TABLE entities (id INTEGER NOT NULL, uuid VARCHAR(36) NOT NULL, type VARCHAR(255) NOT NULL, class VARCHAR(255) NOT NULL, PRIMARY KEY(id))
>>>> CREATE UNIQUE INDEX UNIQ_50EC64E5D17F50A6 ON entities (uuid)
>>>> CREATE TABLE entities_in_aggregator (parent_id INTEGER NOT NULL, child_id INTEGER NOT NULL, PRIMARY KEY(parent_id, child_id), CONSTRAINT FK_2BD88468727ACA70 FOREIGN KEY (parent_id) REFERENCES entities (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_2BD88468DD62C21B FOREIGN KEY (child_id) REFERENCES entities (id) NOT DEFERRABLE INITIALLY IMMEDIATE)
>>>> CREATE INDEX IDX_2BD88468727ACA70 ON entities_in_aggregator (parent_id)
>>>> CREATE INDEX IDX_2BD88468DD62C21B ON entities_in_aggregator (child_id)
>>>> CREATE TABLE properties (id INTEGER NOT NULL, entity_id INTEGER DEFAULT NULL, pkey VARCHAR(255) NOT NULL, value CLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_87C331C781257D5D FOREIGN KEY (entity_id) REFERENCES entities (id) NOT DEFERRABLE INITIALLY IMMEDIATE)
>>>> CREATE UNIQUE INDEX property_unique ON properties (entity_id, pkey)
>>>> CREATE INDEX IDX_87C331C781257D5D ON properties (entity_id)
>>>>                                                                                 
>>>>   [Doctrine\DBAL\Exception\ReadOnlyException]                                   
>>>>   An exception occurred while executing 'CREATE TABLE aggregate (id INTEGER NO  
>>>>   T NULL, channel_id INTEGER NOT NULL, type BOOLEAN NOT NULL, timestamp BIGINT  
>>>>    NOT NULL, value DOUBLE PRECISION NOT NULL, count INTEGER NOT NULL, PRIMARY   
>>>>   KEY(id))':                                                                    
>>>>   SQLSTATE[HY000]: General error: 8 attempt to write a readonly database        
>>>>                                                                                 
>>>> 
>>>>                                                                           
>>>>   [Doctrine\DBAL\Driver\PDOException]                                     
>>>>   SQLSTATE[HY000]: General error: 8 attempt to write a readonly database  
>>>>                                                                           
>>>> 
>>>>                                                                           
>>>>   [PDOException]                                                          
>>>>   SQLSTATE[HY000]: General error: 8 attempt to write a readonly database  
>>>>                                                                           
>>>> 
>>>> scheinbar ist die zieldatenbank readonly. Aber wo und wie kann ich das fixen?
>>>> 
>>>> Gruß Tobias
>>>> Am 06.12.2016 um 19:26 schrieb Andreas Goetz:
>>>> 
>>>>> Deine Config funktioniert genau so. Auf der SQlite Seite kannst Du Dir die Punkte sparen:
>>>>> 
>>>>>                 "host": "localhost",
>>>>>                 "user": "vz",
>>>>>                 "password": "xxx"
>>>>> 
>>>>> 
>>>>> Leider gabs einen Fehler in dbcopy, den hab ich gerade gefixt.
>>>>> 
>>>>> Viele Grüße,
>>>>> Andreas
>>>>> 
>>>>> 
>>>>> 2016-12-06 18:26 GMT+01:00 Theo <geocaching.theo at me.com>:
>>>>> Hallo,
>>>>> 
>>>>> genau das ist es ja was ich wissen will, habe doch jetzt mehrfach geschrieben das ich nicht weiß was ich bei path angeben muss.
>>>>> 
>>>>> Aber hier ist nochmal die komplette dbcopy.json 
>>>>> 
>>>>> {
>>>>>         "source": {
>>>>>                 // source database connection
>>>>>                 "driver": "pdo_mysql",
>>>>>                 "host": "localhost",
>>>>>                 "user": "vz",
>>>>>                 "password": "xxx",
>>>>>                 "dbname": "volkszaehler"
>>>>>         },
>>>>>         "target": {
>>>>>                 // target database connection
>>>>>                 "driver": "pdo_sqlite",
>>>>>                 "path": "sqlite.db3",           // path is only used if driver =$
>>>>>                 "host": "localhost",
>>>>>                 "user": "vz",
>>>>>                 "password": "xxx"
>>>>>                 // "dbname": "backup"
>>>>>         },
>>>>>         "tables": [
>>>>>                 // table configuration (optional)
>>>>>                 // ------------------------------
>>>>>                 // table name
>>>>>                 //              tables will be processed in the order they are m$
>>>>>                 //              - foreign keys on target will be dropped
>>>>>                 //              - if a table is not listed here, it will not be $
>>>>>                 // transfer mode
>>>>>                 //              skip:           table will not be copied
>>>>>                 //              copy:           entire table will be truncated o$
>>>>>                 //              pk:                     selective copy by primar$
>>>>>                 //                                              will be copied f$
>>>>>                 {
>>>>>                         "name": "entities",
>>>>>                         "mode": "copy"
>>>>>                 }, {
>>>>>                         "name": "properties",
>>>>>                         "mode": "copy"
>>>>>                 }, {
>>>>>                         "name": "entities_in_aggregator",
>>>>>                         "mode": "copy"
>>>>>                 }, {
>>>>>                         "name": "data",
>>>>>             	     "mode": "pk"
>>>>>                 }, {
>>>>>                         "name": "aggregate",
>>>>>                         "mode": "skip"
>>>>>                 }
>>>>>         ]
>>>>> }
>>>>> 
>>>>> ein andere Problem das ich habe, ich wollte für die Zukunft composer global aufrufbar machen, damit mir das gezuchtel erspart bleibt. dazu hab ich wie auf https://getcomposer.org/doc/00-intro.md#globally beschrieben die copmposer.phar in den Ordner /usr/local/bin/ verschoben. Aber wenn ich dann z.b. bei /var/www/voklszaehler.org/vendor/andig/dbcopy  composer aufrufen möchte mit z.b. composer update, bekomme ich die Meldung -bash: composer: command not found
>>>>> 
>>>>> 
>>>>> Gruß Tobias
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> Am 06.12.2016 um 18:08 schrieb Andreas Götz:
>>>>> 
>>>>>> Statt Rätselraten wäre die Config hilfreich. Hast Du target auf sqlite geändert? Den Pfad zur Datenbankdatei (path) konfiguriert?
>>>>>> 
>>>>>> Viele Grüße,
>>>>>> Andreas
>>>>>> 
>>>>>> Am 06.12.2016 um 16:17 schrieb Theo <geocaching.theo at me.com>:
>>>>>> 
>>>>>>> Hallo Andreas,
>>>>>>> 
>>>>>>> Tja so selbsterklärend ist es für mich dann doch nicht. Der source part ist klar. Da muss ich nur den user und das passwort auf das meiner vz installation. Bei target weiß ich es eben nicht was ich da ändern/konfigurieren muss. 
>>>>>>> 
>>>>>>> Bzw wird mit dem create befehl eine datenbank erstellt oder wird in einer vorher erstellten Datenbank die tabellenstruktur erstellt?
>>>>>>> 
>>>>>>> Bei ersterem, wo wird die erstellte datenbankdatei gespeichert, bzw wie kann man den speicherort anpassen. Bei zweiterem, wie erstelle ich vorher eine Datenbank?
>>>>>>> 
>>>>>>> Und ja die php sqlit extrnsion hab ich mit 
>>>>>>> 
>>>>>>> Sudo apt-get install sqlite3 php5-sqlite installiert. So wie es im wiki steht. 
>>>>>>> 
>>>>>>> ich hab jetzt mal sowohl bei source als auch bei target die parameter user und password gesetzt, bei source auf die von der volkszaehler datenbank, bei target hab ich die selben genommen, alles andere hab ich gleich gelassen. Dann hab ich folgendes ausgeführt:
>>>>>>> 
>>>>>>> /var/www/volkszaehler.org/vendor/bin/dbcopy.php create -c /etc/dbcopy.json
>>>>>>> und folgende fehlermeldung bekommen:
>>>>>>> 
>>>>>>>                                                                                
>>>>>>>   [Doctrine\DBAL\Exception\ConnectionException]                                
>>>>>>>   An exception occured in driver: SQLSTATE[HY000] [14] unable to open databas  
>>>>>>>   e file                                                                       
>>>>>>>                                                                                
>>>>>>> 
>>>>>>>                                                      
>>>>>>>   [Doctrine\DBAL\Driver\PDOException]                
>>>>>>>   SQLSTATE[HY000] [14] unable to open database file  
>>>>>>>                                                      
>>>>>>> 
>>>>>>>                                                      
>>>>>>>   [PDOException]                                     
>>>>>>>   SQLSTATE[HY000] [14] unable to open database file  
>>>>>>>                                                      
>>>>>>> 
>>>>>>> create [-c|--config CONFIG]
>>>>>>> 
>>>>>>> 
>>>>>>> dann hab ich den befehl nochmal mit sudo vorangestellt getestet, weil ich dachte er könnte die database nicht öffnen, weil die recht fehlen. dann kam aber folgende Fehlermeldung:
>>>>>>> 
>>>>>>>                                                               
>>>>>>>   [Doctrine\DBAL\Exception\SyntaxErrorException]              
>>>>>>>   An exception occurred while executing 'SET NAMES utf8':     
>>>>>>>   SQLSTATE[HY000]: General error: 1 near "SET": syntax error  
>>>>>>>                                                               
>>>>>>> 
>>>>>>>                                                               
>>>>>>>   [Doctrine\DBAL\Driver\PDOException]                         
>>>>>>>   SQLSTATE[HY000]: General error: 1 near "SET": syntax error  
>>>>>>>                                                               
>>>>>>> 
>>>>>>>                                                               
>>>>>>>   [PDOException]                                              
>>>>>>>   SQLSTATE[HY000]: General error: 1 near "SET": syntax error  
>>>>>>>                                                               
>>>>>>> 
>>>>>>> 
>>>>>>> Also was hab ich falsch gemacht? 
>>>>>>> 
>>>>>>> 
>>>>>>> Am 06.12.2016 um 15:42 schrieb Andreas Goetz <cpuidle at gmail.com>:
>>>>>>> 
>>>>>>>> Servus,
>>>>>>>> 
>>>>>>>> 2016-12-06 13:57 GMT+01:00 Theo <geocaching.theo at me.com>:
>>>>>>>> Hallo Daniel,
>>>>>>>> 
>>>>>>>> Ja die wikiseite kenn ich, nach dieser hab ich ja bisher versucht zu arbeiten. Aber diese schweigt sich leider über den part Dbcopy.json aus. Nur das man eine kopie derselben verwenden soll.
>>>>>>>> 
>>>>>>>> Die sollte eigentlich selbsterklärend sein.
>>>>>>>>  
>>>>>>>> 
>>>>>>>> Mein Plan war es jetzt ein backup als sqlite datenbank auf dem gleichen raspi zu erstellen.
>>>>>>>> 
>>>>>>>> Kannst Du machen.
>>>>>>>>  
>>>>>>>> Sqlite3 hab ich nach der wikiseite installiert.
>>>>>>>> 
>>>>>>>> D.h. die PHP Sqlite Extension ist installiert?
>>>>>>>>  
>>>>>>>> Und dann die entstandene datenbank datei zusätzlich auf dem speicher der fritzbox zu sichern. Ich hab sonst kein zusätzliches system auf dem ne Datenbank laufen könnte. 
>>>>>>>> 
>>>>>>>> Mir ist halt nicht ganz klar wo die Datenbank, wenn ich eine erstelle, abgespeichert wird.
>>>>>>>> 
>>>>>>>> Ich verstehe Deine Frage nciht. Eine SQlite Datenbank ist eine Datei, nicht mehr und nicht weniger. Wenn Du die Date kpiert hast ist die "Datenbank" da. Was soll da irgendwo laufen???? Du hast ja keinen zweiten VZ isntalliert sondern nur ein Backup gemacht? 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Tobias
>>>>>>>> 
>>>>>>>> Viele Grüße,
>>>>>>>> Andreas
>>>>>>>>  
>>>>>>>> 
>>>>>>>> > Am 06.12.2016 um 11:50 schrieb Daniel Lauckner <vz at jahp.de>:
>>>>>>>> >
>>>>>>>> > Hallo Theo,
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > schon die Wikiseite entdeckt?
>>>>>>>> > http://wiki.volkszaehler.org/software/tools/dbcopy
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > mfg Daniel
>>>>>>>> >
>>>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20161207/2eefd000/attachment-0001.html>


More information about the volkszaehler-users mailing list