Komplettes Backup - Sichern und Wiederherstellen

  • Hallo,


    wie kann ich alle relevanten Daten meines Servers sichern? Ich wollte duplicity dafür verwenden. Bisher sichere ich nur /root und /var/kunden. Welche Ordner bzw. Dateien benötige ich noch um alle Einstellungen von SysCP zu erwischen und bei einer Neuinstallation via vorinstalliertem SysCP auf debian etch 64 (also das was hier halt verfügbar ist) wieder einspielen zu können. Ich wollte den Ernstfall einmal testen und der Test schlug fehl :(
    Ich konnte zum Beispiel die mySQL Datenbank nicht wieder zurückschreiben, weil immer ein Fehler "Access Denied" wegen der Tabell "information_schema" kam. (Ich hatte vorher einfach nur per phpmyadmin alles exportiert und wollte nun per phpmyadmin import alles wieder reinladen.)


    Eigentlich dachte ich mir das so:


    • Server neu installieren (das etch 64bit Image mit SysCP)
    • Server Namen anpassen (der ist bei mir immer verdreht)
    • aptitude upgrade fahren
    • Daten aus dem Backup zurück speichern
    • MySQL DB mit dem Backup neu schreiben


    3 Probleme hab ich also zusammengefaßt noch:


    • Wie erstelle ich eine Sicherung der MySQL Datenbank (am besten per Shell Aufruf, damit ich das von einem Script machen lassen kann)
    • Wie schreibe ich die MySQL DB komplett neu bzw. mit den gesicherten Daten
    • Welche Daten muss ich sichern, in denen das SysCP seine Konfigurationsdaten ablegt? (Alles andere müsste dann ja vom SysCP selbst wieder neu geschrieben werden - also Configs für Mail und Webserver und so, oder?)


    Und eine kleine Frage hab ich in diesem Zusammenhang auch noch: Brauch ich das root Passwort fürs MySQL noch? Also ist das im SysCP irgendwo gespeichert oder kann ich das bedenkenlos ändern und das SysCP kommt mit seinem eigenen Login vollständig aus? Momentan ist das ja so ein cryptisches Passwort, was ich mir nicht merken kann... das würd ich daher gern ändern wollen.


    mfg Benny

  • Zitat

    1. Wie erstelle ich eine Sicherung der MySQL Datenbank (am besten per Shell Aufruf, damit ich das von einem Script machen lassen kann)


    Für den Backup via Script habe ich mal ein kleines Perl Script gebastelt. Das erstellt für jede Datenbank eine gz-Komprimierte Datei. Die kannste dann via SCP oder oder FTP von Server laden.
    Findest du hier: http://www.sim4000.de/mysql_backup,90.html


    Alternativ kannst Du das auch mit mysqldump machen.

    Code
    mysqldump -u <user> -p --all-databases > dump.sql


    Dann werden alle Datenbanken in einem File gespeichert. Für weiteres tippe in deiner SSH Shell einfach

    Code
    man mysqldump

    ein.

    Zitat

    2. Wie schreibe ich die MySQL DB komplett neu bzw. mit den gesicherten Daten


    So. Zum Beispiel:

    Code
    mysql -u <user> -D <datenbank> < dump.sql


    Falls du gzip Komprimierte Files nimmst, muss das so aussehen:

    Code
    zcat dump.sql | mysql -u <user> -p


    Zitat

    3. Welche Daten muss ich sichern, in denen das SysCP seine Konfigurationsdaten ablegt? (Alles andere müsste dann ja vom SysCP selbst wieder neu geschrieben werden - also Configs für Mail und Webserver und so, oder?)

    Die Konfiguration von sysCP steht komplett in einer mysql Datenbank. Diese heißt im Normalfall "syscp". Dann musste nach der Einrichtung nur die Datenbank wieder einspielen, und einmal im SysCP eine Änderung machen, damit der peilt, das es neue Arbeit für den Cron Job gibt.


    Zur Sicherheit kannst Du noch das gesamte /etc sichern, wo ja die ganzen Configs drin stehen. Dazu halt noch /var, wo die Web Verzeichnisse, Emails, usw liegen.


    //edit
    Das root Password vom MySQL kannst du getrost ändern. Syscp Arbeitet komplett mit seinem eigenen Passwort. Ich würde allerdings bei einem Cryptischem Password bleiben. Das ist wesentlich sicherer als eins, was du dir merken kannst. Mindestens 8 Zeichen, Groß- und Kleinschreibung, Zahlen. Und wenn man es ganz Sicher haben will noch Sonderzeichen. Allerdings keine Zeichen nehmen, die es nur im Deutschen gibt. Zum beispiel Umlaute.
    Nen Kollege von mir hat das gemacht, und wunderte sich dann, warum das im Amerikanischen Layout (was der Login Promt hatte) nicht ging. :D

  • So ich steh grad vor dem Problem, nach einem Backup die Datenbanken wieder einzuspielen.


    Folgendes hatte ich gemacht:


    • in PHPmyAdmin alle DB einzeln exportiert
    • nach dem neuinstallieren des Server in PHPMyAdmin DB wieder eingespielt:

      • syscp DB (alle Tabellen markiert und gelöscht. Anschließend per import Datenbank syscp wieder eingespielt)
      • Neue DB kunde002sql1 (einzige DB eines Kunden) erstellt und per Import mit gesicherten Daten gefüllt
      • mysql DB (alle Tabellen markiert und gelöscht. Anschließend per import Datenabnk mysql wieder eingespielt)




    Syscp läuft nun wieder, soweit ich das sehe, gut. Aber die DB des Kunden002 ist nicht mehr für ihn erreichbar. Ich hab auch mal versucht dem Kunden sein Passwort zu ändern (denn den MySQL Benutzer kunde002sql1 gibt es laut Rechte Tabelle in PHPMyAdmin). Dabei bekomme ich aber den Fehler:

    Code
    [B]SQL-Befehl:[/B]
    SET  PASSWORD  FOR  'kunde002sql1'@ 'localhost' = PASSWORD('***********')
    [B]MySQL meldet:[/B]
    #1133 - Can't find any matching row in the user table

    Aber in der Tabelle user der Datenbank mysql steht dieser Benutzer mit einem Passwort drinn.


    Was kann ich tun?

  • Darum geht es mir ja nicht, sondern um die Frage, ob auch in der user-Tabelle "localhost" steht. Wenn er sagt, dass der Benutzer grundsätzlich in der Tabelle zu finden ist, dann könnte es ja sein, das die zweite Bedingung bei der Suche, nämlich die Host-Angabe, nicht übereinstimmt, warum auch immer. Das wäre dann eine Erklärung dafür, warum der Benutzer trotz des vermeintlichen Tabelleneintrags nicht gefunden wird.


    Ich selbst habe generell auch localhost eingetragen, außer bei kleinen Projekten, bei denen ich per XAMPP lokal entwickle und teste, aber auf eine einheitliche Datenbank zugreifen möchte.

  • In dem Fall hier, wird aber nicht nach der Spalte "Host" gesucht. Das sagt nur aus, das er auf dem MySQL Server "localhost" sucht.


    Da könnte also auch was völlig anderes drin stehen. "Host" sagt ja nur aus, von wo aus sich der Benutzer anmelden darf. Nur ist der Benutzer "syscp" mit dem die Abfrage gemacht wird ja schon angemeldet. Also ist die Angabe "Host" egal.

  • Oh ok. Ich dachte nur, weil man ja verschiedene Benutzer mit dem gleichen Namen, aber unterschiedlichem Host anlegen kann, die völlig unabhängig voneinander sind, also auch unterschiedliche Rechte haben können und unterschiedliche Passwörter (die user-Tabelle hat Host und User als Primärschlüssel). Da wäre es ja durchaus hinderlich, wenn der Host einfach ignoriert wird und das Passwort für alle Benutzer mit dem gleichen Namen gesetzt wird.

  • Okay, ich hatte den Benutzer erst löschen müssen (denn wie schon gesagt stand er ja trotzdem in der Rechtetabelle) und anschließend hatte ich ihn neu angelegt.


    Das mit dem Flushen hatte ich nicht probiert; wie geht das (fürs nächste Mal ist das sinnvoll zu wissen)

  • Wie gesagt, hatte mir ja den user, dessen DB das betraf, ja schon gelöscht und neu angelegt.


    Nun hab ich aber noch zwei weitere User gehabt, deren DB leer wahren (also ich hatte auf dem alten System nur mal die DB im SysCP angelegt).


    Und noch was; als ich den User nun wieder neu angelegt hatte, hatte ich ihm alle Rechte auf DB mit seinem Namen gegeben...


    Hier nun die Ausgaben:

  • Code
    +-----------+--------------+----------------+
    | Host      | User         | Db             |
    +-----------+--------------+----------------+
    | localhost | kunde002sql1 | kunde002sql1_% |

    Wieso steht denn da ein "_%" nach dem Namen?


    Aber daran kann es ja eigentlich nicht liegen... Ist das flush privileges echt sauber durchgelaufen? Lass es am besten noch mal im mysql-Prompt ausführen.


    Versuch dich mal mit dem Benutzer in das mysql Prompt anzumelden. Dann sieht man ja, ob der Benutzer wirklich nicht bekannt ist.

  • Zitat von sim4000

    Wieso steht denn da ein "_%" nach dem Namen?


    Zitat von benny

    Und noch was; als ich den User nun wieder neu angelegt hatte, hatte ich ihm alle Rechte auf DB mit seinem Namen gegeben...


    Aber das betrifft ja nicht die Existenz des Benutzers ;)


    Code
    mysql> flush privileges;
    Query OK, 0 rows affected (0.02 sec)
    Code
    $ mysql -u kunde005sql1 -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'kunde005sql1'@'localhost' (using password: YES)

    hmm - es scheint so alsgäbe es den Benutzer wirklich nicht...
    Allerdings nur zur Sicherheit: Wie änder ich denn direkt im mysql von root aus das Passwort für kunde005sql1? Vielleicht hat er ja jetzt ein anderes Passwort...


    mfg Benny

  • Zitat

    Aber das betrifft ja nicht die Existenz des Benutzers ;)

    Was ich danach ja auch geschrieben habe. ;)


    Also irgendwie verwirrst Du mich jetzt...
    In deinem ersten Post hieß der Benutzer noch kunde002sql1. Jetzt ist es auf einmal kunde005sql1. Was denn nun?


    Naja. Jedenfalls kann es ja nur noch am Password liegen, oder es ist etwas total faul bei dir...


    Das kann man ganz einfach ändern.

    Code
    use mysql;
    update user set Password=PASSWORD('dein_password') where User='kunde005sql1' and Host='localhost';
    flush privileges;

    Stink normales Statement.


    Oder halt wie in deinem ersten Post zu dem Thema mit SET PASSWORD.


    //edit
    Ich hoffe ja, dass das Password nicht im Klartest in der User-Tabelle steht. Weil sonst macht MySQL dicht. Immer schön die Agregat Funktion PASSWORD() nehmen.