Crontab mysqldump Sicherung ja, zurück Nein

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
Wo habe ich dort den Fehler ?

Sicherung funktioniert:

/usr/local/mariadb10/bin/mysqldump --opt -u root -p********** kd40 > /volume1/datenbanken/kd40.sql

Rücksicherung geht nicht:

/usr/local/mariadb10/bin/mysqldump --opt -u root -p*********** kd40 < /volume1/datenbanken/kd40.sql

crontab
Code:
MAILTO=""
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
#minute    hour    mday    month    wday    who    command
0    0    *    *    *    root    /usr/syno/sbin/synopoweroff
50    11    *    *    6    root    /usr/syno/bin/synoschedtask --run id=1
0    12    *    *    0    root    /usr/syno/bin/synoschedtask --run id=2

0    0    *    *    0    root    /volume1/datenbanken/dbback.sh

Hat jemand eine Idee ?
chmod ist gesetzt und die Sicherung funktioniert auch, nur wenn ich > nach < verändere wird die DB nicht bearbeitet.
DB soll einmal die Stunde zurück gesetzt werden.

Auszug der SQL-Datei:
Code:
-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `adressen`
--

DROP TABLE IF EXISTS `adressen`;
CREATE TABLE `adressen` (
  `ID` int(11) NOT NULL,
  `Anrede` varchar(100) NOT NULL,
  `Vorname` varchar(100) NOT NULL,
  `Nachname` varchar(100) NOT NULL,
  `Firma` varchar(100) NOT NULL,
  `Strasse` varchar(100) NOT NULL,
  `Hausnummer` varchar(100) NOT NULL,
  `Zusatz` varchar(100) NOT NULL,
  `Postleitzahl` varchar(100) NOT NULL,
  `cplz` varchar(100) NOT NULL,
  `PLZ_Postfach` varchar(100) NOT NULL,
  `Postfach` varchar(100) NOT NULL,
  `Ort` varchar(100) NOT NULL,
  `Bundesland` varchar(100) NOT NULL,
  `Landkreis` varchar(100) NOT NULL,
  `Telefon` varchar(100) NOT NULL,
  `Mobil` varchar(100) NOT NULL,
  `E-Mail` varchar(100) NOT NULL,
  `Fax` varchar(100) NOT NULL,
  `Webseite` varchar(100) NOT NULL,
  `Maps` varchar(100) NOT NULL,
  `User` varchar(100) NOT NULL,
  `Bing` varchar(100) NOT NULL,
  `order` int(11) DEFAULT NULL,
  `Lat` decimal(20,10) DEFAULT NULL,
  `Lng` decimal(20,10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------
 

Ulfhednir

Benutzer
Mitglied seit
26. Aug 2013
Beiträge
1.394
Punkte für Reaktionen
274
Punkte
109
Ich bin im MySQL-Syntax nicht 100% fit (bin eher mit TSQL zugange).. Kann es sein, dass du beim Import einen weiteren Parameter mitgeben musst, damit die bestehende Datenbank überschrieben wird? Existiert denn ein CREATE DATABASE im Query?

Bzw. was passiert, wenn du vorher einmal die Datenbank dropst / löschst und dann den Import ausführst?

Hast du dich mit den Parametern / Syntax bereits vertraut gemacht?
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
 

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89
Was ist denn überhaupt die Fehlermeldung?

Vielleicht auch mal zusätzlich für detaillierte Informationen --verbose verwenden.
 

AndiHeitzer

Benutzer
Mitglied seit
30. Jun 2015
Beiträge
2.645
Punkte für Reaktionen
268
Punkte
129
Ort
Markt Schwaben
  • Like
Reaktionen: Ulfhednir und luddi

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89
  • Like
Reaktionen: AndiHeitzer

AndiHeitzer

Benutzer
Mitglied seit
30. Jun 2015
Beiträge
2.645
Punkte für Reaktionen
268
Punkte
129
Ort
Markt Schwaben
Hmmmmm, das hat mit 👀 nix zu tun.
Noch verdiene ich als DB-Admin mein Geld damit, anderen Leuten die Kisten zu betreiben 😌
 

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
Zig mal angesehen und den Fehler nicht bemerkt:mad:


Jetzt funktioniert es

/usr/local/mariadb10/bin/mysql -u root -p********** kd40 < /volume1/datenbanken/kd40.sql
 
  • Like
Reaktionen: luddi

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89
@LustierPeter Du glaubst gar nicht wie oft mir so etwas passiert dass ich vor lauter Bäumen den Wald nicht mehr sehe ;)

Schön zu hören dass es jetzt funktioniert!
 

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
Ich muss das Thema leider noch einmal öffnen.

Nachdem ich das Gerät für root über WinSCP verändert habe, laufen die Cronjobs nicht mehr:(

Die Scripte funktionieren aber immer noch über ssh ohne Probleme
jedoch muss ich jetzt ein sh davor setzen, was vorher nicht war
oder auch so abgeändert, funktioniert es über putty

dbback.sh enthält:

#! /usr/bin/env sh
/usr/local/mariadb10/bin/mysql -u root -p*********** kd40 < /volume1/datenbanken/kd40.sql

Also im root Verz. dbback.sh ausführen funktioniert, aber nicht mehr als Cron:eek:

Bitte freundlichst noch einmal um eine Tipp, wo ich suchen muss.

Danke
 

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89
Wie schaut denn der cronjob Eintrag aus?
 

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
so wie im ersten Post geschrieben
Code:
0    0    *    *    0    root    /volume1/datenbanken/dbback.sh

Ich habe an den Scripten nichts verändert.

Auch geht das löschen von Verz. nicht mehr über Cron.

Code:
<?php

// rec_rmdir - loesche ein Verzeichnis rekursiv
// Rueckgabewerte:
//   0  - alles ok
//   -1 - kein Verzeichnis
//   -2 - Fehler beim Loeschen
//   -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und
//        kein Link
function rec_rmdir ($path) {
    // schau' nach, ob das ueberhaupt ein Verzeichnis ist
    if (!is_dir ($path)) {
        return -1;
    }
    // oeffne das Verzeichnis
    $dir = @opendir ($path);
   
    // Fehler?
    if (!$dir) {
        return -2;
    }
   
    // gehe durch das Verzeichnis
    while ($entry = @readdir($dir)) {
        // wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis
        // ist, ignoriere es
        if ($entry == '.' || $entry == '..') continue;
        // wenn der Eintrag ein Verzeichnis ist, dann
        if (is_dir ($path.'/'.$entry)) {
            // rufe mich selbst auf
            $res = rec_rmdir ($path.'/'.$entry);
            // wenn ein Fehler aufgetreten ist
            if ($res == -1) { // dies duerfte gar nicht passieren
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // normalen Fehler melden
            } else if ($res == -2) { // Fehler?
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // Fehler weitergeben
            } else if ($res == -3) { // nicht unterstuetzer Dateityp?
                @closedir ($dir); // Verzeichnis schliessen
                return -3; // Fehler weitergeben
            } else if ($res != 0) { // das duerfe auch nicht passieren...
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // Fehler zurueck
            }
        } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
            // ansonsten loesche diese Datei / diesen Link
            $res = @unlink ($path.'/'.$entry);
            // Fehler?
            if (!$res) {
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // melde ihn
            }
        } else {
            // ein nicht unterstuetzer Dateityp
            @closedir ($dir); // Verzeichnis schliessen
            return -3; // tut mir schrecklich leid...
        }
    }
   
    // schliesse nun das Verzeichnis
    @closedir ($dir);
   
    // versuche nun, das Verzeichnis zu loeschen
    $res = @rmdir ($path);
   
    // gab's einen Fehler?
    if (!$res) {
        return -2; // melde ihn
    }
   
    // alles ok
    return 0;
}

?>

Aufruf als userfiles2.php
Code:
<?php
    // importiere die Datei mit der Funktion
    require 'recrmdir.inc.php';
   
    // loesche das Verzeichnis /userfiles
    $res = rec_rmdir ('/volume1/web/meinedomain.ddns.net/userfiles');
    // wurde das Verzeichnis korrekt gelöscht
    switch ($res) {
      case 0:
        // das Verzeichnis wurde korrekt gelöscht
        break;
      case -1:
        // das war kein Verzeichnis
        break;
      case -2:
        // ein Fehler ist aufgetreten
        break;
      case -3:
        // die Funktion ist über einen Dateityp gestolpert, den sie nicht kennt
        break;
      default:
        // die Funktion hat irgend etwas zurückgegeben, was sie eigentlich nicht sollte
        break;
    }
?>

Wie gesagt. der direkte Aufruf über putty oder WinSCP funktioniert
 

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
so wie im ersten Post geschrieben
Code:
0    0    *    *    0    root    /volume1/datenbanken/dbback.sh

Ich habe an den Scripten nichts verändert.

Auch geht das löschen von Verz. nicht mehr über Cron.

Code:
<?php

// rec_rmdir - loesche ein Verzeichnis rekursiv
// Rueckgabewerte:
//   0  - alles ok
//   -1 - kein Verzeichnis
//   -2 - Fehler beim Loeschen
//   -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und
//        kein Link
function rec_rmdir ($path) {
    // schau' nach, ob das ueberhaupt ein Verzeichnis ist
    if (!is_dir ($path)) {
        return -1;
    }
    // oeffne das Verzeichnis
    $dir = @opendir ($path);

    // Fehler?
    if (!$dir) {
        return -2;
    }

    // gehe durch das Verzeichnis
    while ($entry = @readdir($dir)) {
        // wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis
        // ist, ignoriere es
        if ($entry == '.' || $entry == '..') continue;
        // wenn der Eintrag ein Verzeichnis ist, dann
        if (is_dir ($path.'/'.$entry)) {
            // rufe mich selbst auf
            $res = rec_rmdir ($path.'/'.$entry);
            // wenn ein Fehler aufgetreten ist
            if ($res == -1) { // dies duerfte gar nicht passieren
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // normalen Fehler melden
            } else if ($res == -2) { // Fehler?
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // Fehler weitergeben
            } else if ($res == -3) { // nicht unterstuetzer Dateityp?
                @closedir ($dir); // Verzeichnis schliessen
                return -3; // Fehler weitergeben
            } else if ($res != 0) { // das duerfe auch nicht passieren...
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // Fehler zurueck
            }
        } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
            // ansonsten loesche diese Datei / diesen Link
            $res = @unlink ($path.'/'.$entry);
            // Fehler?
            if (!$res) {
                @closedir ($dir); // Verzeichnis schliessen
                return -2; // melde ihn
            }
        } else {
            // ein nicht unterstuetzer Dateityp
            @closedir ($dir); // Verzeichnis schliessen
            return -3; // tut mir schrecklich leid...
        }
    }

    // schliesse nun das Verzeichnis
    @closedir ($dir);

    // versuche nun, das Verzeichnis zu loeschen
    $res = @rmdir ($path);

    // gab's einen Fehler?
    if (!$res) {
        return -2; // melde ihn
    }

    // alles ok
    return 0;
}

?>

Aufruf als userfiles2.php
Code:
<?php
    // importiere die Datei mit der Funktion
    require 'recrmdir.inc.php';

    // loesche das Verzeichnis /userfiles
    $res = rec_rmdir ('/volume1/web/meinedomain.ddns.net/userfiles');
    // wurde das Verzeichnis korrekt gelöscht
    switch ($res) {
      case 0:
        // das Verzeichnis wurde korrekt gelöscht
        break;
      case -1:
        // das war kein Verzeichnis
        break;
      case -2:
        // ein Fehler ist aufgetreten
        break;
      case -3:
        // die Funktion ist über einen Dateityp gestolpert, den sie nicht kennt
        break;
      default:
        // die Funktion hat irgend etwas zurückgegeben, was sie eigentlich nicht sollte
        break;
    }
?>

Wie gesagt. der direkte Aufruf über putty oder WinSCP funktioniert
Falsche Code....war vom andern NAS..

rm -r userfiles direk im Webverz. der Domain funktioniert über ssh aber nicht als CRON
Welche Attribute hat denn die Datei?
Ist sie ausführbar?
Bekommst du irgendeine Fehlermeldung?
Nein
Soll das Skript immer Samstag auf Sonntag nachts um 0:00 Uhr starten?
 

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
Welche Attribute hat denn die Datei?
0777
Ist sie ausführbar?
ja
Bekommst du irgendeine Fehlermeldung?
Nein

Ich habe Gruppe und Eigentümer schon zig mal gewechselt,admin,root,user, war aber auch nix.



Ich muss jetzt endlich mal ein Wochenende weg von den Rechnern und werde ab Montag in Ruhe mir noch einmal alles ansehen.
 

tproko

Benutzer
Mitglied seit
11. Jun 2017
Beiträge
1.536
Punkte für Reaktionen
152
Punkte
89
Nachdem du die Skripte schon hast, könntest du sie ja auf ein Volume packen und das ganze via Aufgabenplaner realisieren.
Dort sollte das Skript wie bisher auszuführen (ohne sh), und das mit den Rechten hat bei mir da eigentlich auch immer gut geklappt.
 

luddi

Benutzer
Mitglied seit
05. Sep 2012
Beiträge
1.923
Punkte für Reaktionen
112
Punkte
89
Nachdem du die Skripte schon hast, könntest du sie ja auf ein Volume packen und das ganze via Aufgabenplaner realisieren.
Laut #11 liegt das script file ja bereits auf /volume1
Ich würde es aber auch erst noch einmal auf diesem Weg probieren den Aufgabenplaner zu bemühen.
 

LustierPeter

Benutzer
Mitglied seit
23. Jul 2020
Beiträge
23
Punkte für Reaktionen
1
Punkte
3
Mit dem Aufgabenplaner funktioniert es :eek:...warum auch immer.
 

tproko

Benutzer
Mitglied seit
11. Jun 2017
Beiträge
1.536
Punkte für Reaktionen
152
Punkte
89
Ja dort macht halt DSM die Berechtigungen. Das klappt dann bei dir anscheinend ja besser.