Datenbanksicherung

Für Modifikationen in und um KeyHelp.
Post Reply
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

Datenbanksicherung

Post by Tobi »

Hi Zusammen,

da schön öfters hier die Frage aufkam wie man Datenbanken sichern kann, hier mein Skript zur Sicherung aller Datenbanken.
Es benötigt lediglich die Zugangsdaten von mysqladmin und schon können alle Datenbanken als ZIP Datei gesichert werden.

Die Tabellen werden separat gesichert und die gesamte Datenbank wird in eine ZIP Datei gepackt.
So kann man immer ganz gezielt das wiederherstellen was verloren gegangen sein mag.

Man könnte versuchen das Skript über den Browser aufzurufen.
Dies hat aber zwei entscheidende Nachteile.
1. Alle Backups wären dann, bei Kenntnis der URL, offen zugänglich.
2. Die Skriptlaufzeit könnte nicht reichen und ggf. beschädigte Tabellen zurücklassen (nur mit der Option autooptimize).

Daher einfach einen Cronjob anlegen.
Typ PHP-Skript und PHP Version 7.x. 8 sollte auch funktionieren.

Folgende Parameter können angepasst werden.

Code: Select all

// Mysql Zugangsdaten
$MYSQL_root_username = "mysqladmin";
$MYSQL_root_password = "PASSWORT";

// Diese Datenbanken werden NICHT gesichert
// Die einzelnen Datenbanknamen werden mit Komma getrennt
$MYSQL_skip_database = "information_schema,mysql,performance_schema,phpmyadmin,roundcube,rainloop"; 


// Die Inhalte dieser Tabellen werden NICHT gesichert.
// Die Struktur wird gesichert.
// Die einzelnen Tabellennamen werden mit Komma getrennt.
// Der Tabellenname muss nicht vollständig sein. Es reicht ein Teilstring.
// $MYSQL_skip_tables = "index_,cache"; 
$MYSQL_skip_tables = "cache"; 

// AUTOOPTIMIZE
// Tabellenüberhänge können automatisch korrigiert werden. 
// Dies kann die Geschwindigkeit von Tabellenabfragen signifikant beschleunigen.
// Der Schwellwert ist in Bytes angegeben. Erst bei Überschreitung dieser Größe wird optimiert.
// Ein wenig Überhang ist aber ganz normal.
// 0 = AUS
// 1 = AN
$autooptimize = 0;
$optimize_schwellwert = 1024;

// Datum und Uhrzeit dem Dateipfad hinzufügen
// Somit kann man ein Archiv der Backups anlegen.
// Vorsicht! Damit kann man sich auch ganz schnell die Festplatte vollballern.
// 0 = AUS
// 1 = AN
$datum_in_pfad = 0;
Ihr findet diese Angaben am Anfang des Skriptes.
Die Datei muss natürlich in ".php" umbenannt werden ;-).
Attachments
mariadb_backup.php.txt
(4.56 KiB) Downloaded 138 times
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
User avatar
Webrockers
Posts: 33
Joined: Fri 14. Oct 2022, 16:40
Location: Karlsruhe
Contact:

Re: Datenbanksicherung

Post by Webrockers »

Hi Tobi

Ich bedanke mich mal dafür.

lg
Marco

P.S.
#CAFFEE
"Have you tried turning it off and on again?"
"Keep calm and call 0118-999-88199-9119-725-3"
User avatar
Ralph
Posts: 786
Joined: Mon 30. Mar 2020, 16:14

Re: Datenbanksicherung

Post by Ralph »

sehr cool, von mir ebenfalls vielen Dank !
blackpanther
Posts: 26
Joined: Mon 9. Apr 2018, 13:32

Re: Datenbanksicherung

Post by blackpanther »

Hallo.

Da ich auf der suche bin, nach einer möglichkeit um die lokalen Datenbanken zu sichern, bin ich über diesen Thread durch zufall gestolpert.

Ich habe das Script heruntergeladen, und das entsprechende mysqlpasswort eingetragen, welches ja durch keyhelp angelegt wurde.

Und da kommt nun ein großes "Aber".

In abhängikeit vom genutzen PHP 7.4 listet er alles auf, was ich an datenbanken habe.
In dem Verzeichnis wo die PHP datei liegt, erstellt er auch den backupordner mit den rechten 755

Doch mehr passiert leider nicht.

Mit PHP 8.0 oder 8.2 (ab 8.0 im Produktiven web einsatz) bleibt die seite weiß, und der ordner ist zwar da, aber er bleibt leer.
Es wird dann ein weiter unterordner erstellt, der wohl der erste eintrag der DB sein soll, aber auch hier, passiert einfach nichts mehr.

Liegt das an keyhelp selbst, oder was ist da los ?

Sowohl in meiner Testumgebung, als auch im Produktiven Einsatz läuft Keyhelp in vers. 23.0

lg
BP

//EDIT//NACHTRAG (09:50 uhr)

Ich habe nun einen versuch gestartet zum testen, und das Script innerhalb der Shell gestartet, hier hat das script tatsächlich alle Datenbanken nun
gesichert.

also funktionieren tut es wohl doch, aber da ich das per Browser die ganze zeit versucht habe, gehe ich mal davon aus, das der webbenutzer, der ja per keyhelp angelegt ist, System technisch nicht befugt ist, auf die Datenbank zuzugreifen.

Andererseits spricht hier völlig dagegen, warum aber die auslesung erfolgte, und zumindest ordner angelegt worden sind, aber diese ohne jegliche inhalte ?
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

Re: Datenbanksicherung

Post by Tobi »

„Die Seite bleibt weiss“ sagt mir, dass du versuchst das Script im Browser aufzurufen.
Das ist keine gute Idee. Warum? Ersten Beitrag lesen!

Einfach einen Cronjob anlegen und dann sollte es auch funktionieren.
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
blackpanther
Posts: 26
Joined: Mon 9. Apr 2018, 13:32

Re: Datenbanksicherung

Post by blackpanther »

Hallo.
Du hattest in dem Beitrag selbst erwähnt, das man es über den Browser so aufrufen "könnte".
Daraus entstand letztlich der versuch, es zunächst über den browser aufzurufen.

Genau das habe ich getan.
In meiner testumgebung ist das nicht so schlimm, denn die VM ist nicht an die außenwelt angebunden, ich arbeite komplett im Heimischen Netzwerk.

Bei der LIVE variante - gesetz dem fall es hätte funktioniert - hätte ich fix eine passende ".htaccess" geschaffen, und dann wäre es in meinen augen auch noch "OK" gewesen.

Aber lokal geht es ja auch.

ich habe auf meinem Live system, 23 Datenbanken - und ja, die sind alle produktiv - wie würdest du gesetz des falles, es müsste wieder eingespielt werden wieder zurück spielen ?

Das backuppen ist ja, wie ich nun gemerkt habe ganz einfach gewesen.

(Gedanke) -> Mein bauchgefühl sagt mir, das es nicht geht, denn woher soll das system die jeweiligen Datenbanken infos kennen, wie user und db und der gleichen ?
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Datenbanksicherung

Post by Jolinar »

blackpanther wrote: Mon 3. Apr 2023, 10:35 ich habe auf meinem Live system, 23 Datenbanken - und ja, die sind alle produktiv - wie würdest du gesetz des falles, es müsste wieder eingespielt werden wieder zurück spielen ?
Wie wäre es denn mal mit Lesen der entsprechenden Doku?

Als Ansatz:

Code: Select all

mysql -u username -p -e "CREATE DATABASE mydatabase"
mysql -u username -p mydatabase < /path/to/backup.sql
Schleife drumherum bauen, um es zu automatisieren. Fehlerprüfung und wenn nötig, Logging dazu und schon flutscht das Ganze mit beliebigen vielen DBs.
Scriptvorlage hast du ja durch das Backupscript. Jetzt darfst du basteln :D
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Datenbanksicherung

Post by Jolinar »

@Tobi:
Tobi wrote: Fri 25. Nov 2022, 11:02 hier mein Skript zur Sicherung aller Datenbanken
Hab mir dein Script grad mal kurz angeschaut und würde eine kleine Erweiterung anregen, die die Datenbanken vor dem Backup in den "read-only"-Modus versetzt, um so Schreibzugriffe während des Backups zu unterbinden und Dateninkonsistenzen zu vermeiden.
Hint:

Code: Select all

`FLUSH TABLES WITH READ LOCK`
Natürlich nur, wenn du es für genauso sinnvoll hältst wie ich ;) 8-)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

Re: Datenbanksicherung

Post by Tobi »

Jolinar wrote: Mon 3. Apr 2023, 11:08die Datenbanken vor dem Backup in den "read-only"-Modus versetzt
Mein Skript sichert die Datenbanken nicht als Ganzes sondern tabellenweise.
Durch den Parameter "--quick" wird der Dump für große Datenbanken optimiert, da zeilenweise exportiert wird.

Welch "Dateninkonsistenzen" schweben dir vor?

Ein Lock ist halt zum einen problematisch, da vorab nicht bekannt ist wie lange der Export wohl dauern mag.
Zum anderen könnten Webanwendungen zum Erliegen kommen weil die nicht schreiben können (Beispiel: Online-Bestellung, Sessionverwaltung etc)
Und richtig schlimm wird es wenn der Export (warum auch immer) fehlschlägt und der Lock nicht wieder aufgehoben wird.





blackpanther wrote: Mon 3. Apr 2023, 10:35 wie würdest du gesetz des falles, es müsste wieder eingespielt werden wieder zurück spielen ?
Ich würde die benötigten Tabellen zuerst mit "cat" zusammenfassen und anschließend mit "mysql" importieren.
"CREATE DATABASE" ist nicht nötig, neue Datenbanken bitte mit KeyHelp anlegen.
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Datenbanksicherung

Post by Jolinar »

Tobi wrote: Mon 3. Apr 2023, 13:43 Welche "Dateninkonsistenzen" schweben dir vor?
Ich mag jetzt nicht glauben, daß du in deiner langjährigen Praxis noch keine Erfahrungen mit inkonsistenten Daten hattest... :?

Aber gut...Für alle Mitlesenden ein (sehr vereinfachtes!) Beispiel, wie eine Inkonsistenz entsteht:

Man nehme eine Webanwendung (zB. einen Webshop) und diese Webanwendung muß für eine Aktion (zB. eine Bestellannahme) Daten in mehrere (sagen wir 3) Tabellen einer Datenbank schreiben, dafür werden intern also mehrere Requests an den DB Server abgefeuert.
Wenn jetzt zeitgleich ein Backup dieser Datenbank stattfindet, macht die Backuproutine nichts anderes, als ebenfalls Requests an den DB Server zu senden.
Der DB Server wiederum nimmt die Requests an und arbeitet sie nacheinander ab. Wenn die Requests jetzt ein unglückliches Timing haben (also die Requests von den beiden Anwendungen sich vermischen), dann könnte folgendes Szenario passieren:
- Webanwendung schreibt erste Tabelle
- Backup macht Dump der Datenbank
- Webanwendung schreibt zweite und dritte Tabelle
Wenn man jetzt die Datenbank aus dem Backup wiederherstellen würde, dann wären die Änderungen durch die Webanwendung in der ersten Tabelle vorhanden, in den beiden anderen hingegen nicht...Und damit wäre die Datenbank inkonsistent.
Wie schon gesagt ist das nur sehr vereinfacht, um die grundsätzliche Entstehung einer Inkonsistenz zu veranschaulichen. ;)

Tobi wrote: Mon 3. Apr 2023, 13:43 Ein Lock ist halt zum einen problematisch, da vorab nicht bekannt ist wie lange der Export wohl dauern mag.
Zum anderen könnten Webanwendungen zum Erliegen kommen weil die nicht schreiben können (Beispiel: Online-Bestellung, Sessionverwaltung etc)
Für sowas bieten viele komplexere Webanwendungen einen Wartungsmodus an.

Tobi wrote: Mon 3. Apr 2023, 13:43 Und richtig schlimm wird es wenn der Export (warum auch immer) fehlschlägt und der Lock nicht wieder aufgehoben wird.
Auch das kann (und sollte) man dann scripttechnisch abfangen.
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Datenbanksicherung

Post by 24unix »

Jolinar wrote: Mon 3. Apr 2023, 16:31 - Webanwendung schreibt erste Tabelle
- Backup macht Dump der Datenbank
- Webanwendung schreibt zweite und dritte Tabelle
Darum verwendet man Transaktionen. Die sind bei MySQL hinreichend atomar.
Webanwendung sagt, das es in Tabelle 1, 2, 3 schreiben will, und was. Dann kommt der Commit.
Da pfuscht Dir das Restore nicht zwischen. Ist mir jedenfalls in 25 Jahren noch nicht passiert …
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Datenbanksicherung

Post by Jolinar »

24unix wrote: Mon 3. Apr 2023, 16:45 Ist mir jedenfalls in 25 Jahren noch nicht passiert …
Völlig klar, mir übrigens in der Form auch nicht. 8-)

Aber mir ging es eher um die Veranschaulichung, deswegen sagte ich ja auch:
Jolinar wrote: Mon 3. Apr 2023, 16:31 ein (sehr vereinfachtes!) Beispiel
Es hat aber schon seinen Grund, warum es die LOCK Funktion gibt. ;)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

Re: Datenbanksicherung

Post by Tobi »

Jolinar wrote: Mon 3. Apr 2023, 16:31 Ich mag jetzt nicht glauben, daß du in deiner langjährigen Praxis noch keine Erfahrungen mit inkonsistenten Daten hattest... :?
Du anscheinend ja auch nicht...
Jolinar wrote: Mon 3. Apr 2023, 16:31 Für sowas bieten viele komplexere Webanwendungen einen Wartungsmodus an.
Das mag ja sein, aber mein Skript wird garantiert nicht alle möglichen Webanwendungen daraufhin prüfen ob es einen Wartungsmodus geben mag oder nicht.
Jolinar wrote: Mon 3. Apr 2023, 16:31 Auch das kann (und sollte) man dann scripttechnisch abfangen.
Wie sollte ich das denn? Wenn es hängt, hängt es. Von "außen" zu prüfen ob es hängt ist fast nicht möglich, es könnte auch noch das Backup laufen. Natürlich könnte man prüfen ob die Datei XY noch größer wird oder nicht. Aber das ist alles viel zu kompliziert.
Daher verwende ich "--quick".

Fazit:
Wer Angst hat, dass Dateninkonsistenzen entstehen könnten, der möge bitte von meinem Skript Abstand nehmen und sich selbst was programmieren.
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
Post Reply