FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rewe2000 am 28 Oktober 2017, 17:12:25

Titel: MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: Rewe2000 am 28 Oktober 2017, 17:12:25
Hallo,

dies ist sicher eine einfache Lösung für Linux Profis, aber ich suche mir seit etlichen Stunden die Finger wund.

Ich will folgendes automatisiert auf einem Raspi3 erledigen:
Tägliches sichern der "fhem" MariaDB im laufenden Betrieb, in ein Verzeichnis auf dem Raspi, welches ich dann manuell mit Filezilla leere (Verschieben auf PC).

Password Datei anlegen:
cd ~
sudo nano .my.cnf

[client]
host=localhost
user=Name   
password=Kennwort


Backup Script anlegen:
cd ~
sudo nano dbbackup.sh

#!/bin/bash
OUTPUT_FILE=/home/pi/datenbankbackup-$(date +%Y%m%d).bz2
DATABASE_NAME="fhem"

mysqldump --defaults-file=.my.cnf $DATABASE_NAME | bzip2 > $OUTPUT_FILE


Zugriffsrechte setzen:
sudo chmod 755 dbbackup.sh

Conjob anlegen, Bearbeitung mit nano:
sudo crontab -e

Mein Eintrag in Crontab sieht wie folgt aus:
# Sichern der MariaDB SQL Datenbank, täglich um 03:05 Uhr
05 03 * * * /home/pi/dbbackup.sh



Diese Anleitung ist nicht von mir, sie stammt von Marco https://oyox.de/524-automatisiertes-mysql-raspberry-pi/ (https://oyox.de/524-automatisiertes-mysql-raspberry-pi/)

Der conjob läuft genau zur eingestellten Zeit, aber es wird nur eine leere Datei erzeugt.

Führe ich das script direkt über SSH pi@raspberrypi:~ $ sudo /home/pi/dbbackup.sh aus, so wird das Backup ordnungsgemäß erstellt und die Datei hat dann eine Größe von ~1,5 Mb.

Ich vermute ein Problem mit den Userrechten, habe aber keinen Plan wie ich es anders lösen könnte. Solltet ihr mehr Infos von mir benötigen, so bitte ich um Info.
Crontab führt doch die darin enthaltenen Befehle als root aus, oder irre ich mich da?

Sollte es andere, einfachere oder bessere Lösungen für mein Problem geben so bin ich gerne bereit diese anzunehmen.

Danke für die Hilfe
Reinhard
Titel: Antw:MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: CoolTux am 28 Oktober 2017, 17:42:44
Es wird Dein Problem nicht lösen, aber es zeigt Dir den korrekten Weg


Internals:
   CFGFN
   COMMAND    configdb dump
   DEF        *02:15:00 configdb dump
   NAME       atConfigDB_DumpTaeglich
   NR         428
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 02:15:00
   TIMESPEC   02:15:00
   TRIGGERTIME 1509236100
   TRIGGERTIME_FMT 2017-10-29 02:15:00
   TYPE       at
   READINGS:
     2017-10-28 06:01:17   state           Next: 02:15:00
Attributes:
   group      Backup
   room       EDV
Titel: Antw:MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: DS_Starter am 28 Oktober 2017, 18:04:40
Speziell für MySQL/MariaDB habe ich im DbRep die Möglichkeit zur Anfertigung von Dumps im laufenden Betrieb implementiert. Es sind Client- oder auch Serverseitige Dumps möglich (Die Unterscheidung vor allem wenn man den Maria-Server remote vom FHEM-Server betreibt).
Restore ist ebenfalls möglich, genauso wie die Optimierung der Tabellen vor dem Backup (auch als separater Befehl).
Scripte brauchst du keine bauen und eine Versionsverwaltung ist auch dabei.
Siehe -> https://fhem.de/commandref_DE.html#DbRep

Hinweis: Du solltest das verbundene DbLog-Device unbedingt im asynchronen Modus betreiben damit es zu keinen Blockierungen kommt.

Vielleicht hilft dir das als Alternativlösung.

Grüße
Heiko
Titel: Antw:MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: kadettilac89 am 28 Oktober 2017, 18:47:37
Zitat von: Rewe2000 am 28 Oktober 2017, 17:12:25
Ich vermute ein Problem mit den Userrechten, habe aber keinen Plan wie ich es anders lösen könnte. Solltet ihr mehr Infos von mir benötigen, so bitte ich um Info.
Crontab führt doch die darin enthaltenen Befehle als root aus, oder irre ich mich da?

Möglichkeiten wurden dir schon genannt.

Du nutzt ein Script von 2013. MariaDB hat verschärfte Sicherheitseinstellungen, z. B. Root Login per Passwort. Wenn du das Script ausführen willst dann teste mal ob du dich mit dem verwendeten User überhaupt an der Console einloggen kannst. Vielleicht stolperst du über die localhost Einschränkung.

https://kofler.info/root-login-problem-mit-mariadb/ (https://kofler.info/root-login-problem-mit-mariadb/)

Schau mal in die Systemlogs was hier schief gelaufen ist, sowohl MySql (Mariadb) oder auch Syslog sollte hier mehr Input liefern.
Titel: Antw:MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: Rewe2000 am 28 Oktober 2017, 19:39:20
Danke euch allen für die Antworten,

ich habe es nun wie von DS_Starter vorgeschlagen über Fhem selbst mit dem Modul DbRep gelöst, welches einmal täglich von einem at aufgerufen wird.
COMMAND      set DBReport dumpMySQL clientSide
DEF      *03:05:55 set DBReport dumpMySQL clientSide


Alle bisherigen Tests waren sehr erfolgversprechend :).

Irgendwie liest man immer an den falschen Stellen, obwohl das Gute (Fhem) liegt so nah!
Ich bin echt immer wieder erstaunt, was mit Fhem doch alles möglich ist, dank der unermüdlichen Modulentwickler und der sehr hilfsbereiten Comunity.

Danke nochmals von einem (jetzt) glücklichen User
Reinhard
Titel: Antw:MySQL (MariaDB) Backup über Cronjob liefert leere Datei
Beitrag von: SabineT am 29 Oktober 2017, 08:37:46
Zitat von: Rewe2000 am 28 Oktober 2017, 17:12:25

mysqldump --defaults-file=.my.cnf $DATABASE_NAME | bzip2 > $OUTPUT_FILE
Ich denke dein Fehler hier ist, dass du bei der .my.cnf keinen Pfad mit angibst. Wenn du das Script "zu Fuss" aufrufst, stehts du ja vermutlich im Homeverzeichnis, daher stört das da nicht. Mit
mysqldump --defaults-file=~/.my.cnf $DATABASE_NAME | bzip2 > $OUTPUT_FILE
sollte es dann funktionieren. Entscheidend ist hier das ~/

Ich verwende übrigens absichtlich nicht DbRep für das Backup der Datenbank, weil ich das unabhängig vom FHEM haben will.

lg, Sabine