frm222
Goto Top

Automatisches mySQL-Backup + Datenübertragung auf anderes System

Hallo Zusammen,

ich bräuchte mal eure Hilfe.
Ich bin leider ein ziemlicher Linux-Neuling, also bitte verzeiht mir blöde Fragen...

Ich würde gerne bei einer Linux-Maschine (Ubuntu) das Datenbank-Backup automatisieren.
Ziel wäre...
...regelmäßiges herunterladen einer Backup-Datei (haben wir händisch mit dem Befehl mysqldump schon einmal gemacht)
...diese Datei soll einen Zeitstempel bekommen
...und soll anschließen auf ein anderes System, in unserem Fall ein Windows-Backup-Server, übertragen werden (haben wir händisch schon einmal mit dem Befehl smbclient versucht)
...alle Backup-Dateien, die älter als 3 Tage sind, sollen automatisch aus dem Ordner gelöscht werden

Nun ist die Frage wie ich das realisieren kann? Mit einem Skript und dann über Cronjob? Hier bräuchte ich dann aber eure Hilfe, bin da wirklich ein absoluter Anfänger.

Ich freue mich auf eure Unterstützung.
Vielen Dank im Voraus.

Content-ID: 5910575588

Url: https://administrator.de/forum/automatisches-mysql-backup-datenuebertragung-auf-anderes-system-5910575588.html

Ausgedruckt am: 21.12.2024 um 15:12 Uhr

godlie
godlie 08.02.2023 um 15:23:02 Uhr
Goto Top
Hallo,

das lässt sich alles sehr einfach mit automysqlbackup bewerkstelligen.

https://www.rosehosting.com/blog/how-to-install-and-configure-automysqlb ...
https://kaisenlinux.org/manpages/automysqlbackup.html

Entweder im PREBACKUP die Freigabe vom Windows Server mounten, oder im POSTBACKUP....

grüße
FrM222
FrM222 09.02.2023 um 12:02:28 Uhr
Goto Top
Hallo,

danke für den Tipp.
Ich habe mal ein bisschen mit automysqlbackup rumgespielt, habe aber noch ein paar Fragen.
Wenn ich das richtig sehe, wird das letzte Backup automatisch überschrieben und nur das neuste Backup gespeichert, richtig? Dann muss ich mich also nicht darum kümmern, dass alle Backupdateien älter x Tagen automatisch gelöscht werden.

Und könntest du das mit der Windows-Freigabe bitte nochmal genauer erklären? Hier komme ich noch nicht zurecht... Was genau muss hier eingefügt werden und wie schaffe ich das mit der entsprechenden Windows-Benutzeranmeldung?

Muss ich dann überhaupt noch einen Cronjob einrichten, der automysqlbackup ausführt oder ist das hier gar nicht mehr nötig?

Danke und viele Grüße
godlie
Lösung godlie 09.02.2023 um 14:54:36 Uhr
Goto Top
Hallo,

hm so wies aussieht kann man bei dem automysqlbackup package keine eigene Rotation mehr einstellen, schade
eigentlich aber rein theoretisch müsste das so herum funktionieren

Du musst in der /etc/default/automysqlbackup folgendes aktivieren:
PREBACKUP="/etc/mysql-backup-pre"  
POSTBACKUP="/etc/mysql-backup-post"  

dann diese 2 Shell scripts erstellen und mit chmod +x ausführbar machen

mysql-backup-pre:
#!/bin/sh
mount -t cifs -ousername=bla,password=bla //Windows/SHARE /mnt

mysql-baclup-post:
#!/bin/sh
# damit werden die Files der letzten 3 Tage kopiert
find /var/backups/mysql/ -mtime -3 | xargs cp -t /mnt/mysqlbackup
umount /mnt

Zum Thema Löschung der alten Jobs könntest dir ja den cronjob der dir das automysqlbackup aufruft in ein Shell script tüten, dass dir dann die "alten" files löscht, weis zwar nicht ob das automysqlbackup damit soviel freude haben wird, aber einen Versuch ist es wert.

#!/bin/sh
automysqlbackup
find /var/backups/mysql/ -mtime +3 -delete
FrM222
FrM222 10.02.2023 um 10:50:19 Uhr
Goto Top
Hallo godlie,

vielen Dank für deine Hilfe.
Der Prozess läuft unter Ubuntu nun soweit ganz gut. Eine Frage hätte ich noch bzgl. der Zeit. Ich habe jetzt einen Cronjob angelegt, der nachts dieses automysqlbackup anstößt. Das funktioniert auch, allerdings wurde das Backup heute morgen dann nochmal ausgeführt. Kann ich in der Konfiugrationsdatei auch etwas bzgl. den Ausführzeiten festlegen?

Und unter Debian funktioniert es bei mir leider gar nicht. Hier bekomme ich direkt eine Fehlermeldung:
2023-02-10_debian_mysql-backup
Kann mir hier jemand weiterhelfen? Die debian.cnf existiert bei mir gar nicht.

Vielen Dank im Voraus.
godlie
godlie 10.02.2023 um 13:07:30 Uhr
Goto Top
Hallo,

ja da ist es so das bei der installation des Packages automatisch der cronjob erzeugt wird, hab ich vergessen zu erwähnen.

dpkg-query -L automysqlbackup
/.
/etc
/etc/automysqlbackup
/etc/cron.daily
/etc/cron.daily/automysqlbackup
/etc/default
/etc/default/automysqlbackup
/usr
/usr/sbin
/usr/sbin/automysqlbackup
/usr/share
/usr/share/doc
/usr/share/doc/automysqlbackup
/usr/share/doc/automysqlbackup/README.Debian
/usr/share/doc/automysqlbackup/changelog.Debian.gz
/usr/share/doc/automysqlbackup/copyright
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/automysqlbackup.8.gz
/var
/var/lib
/var/lib/automysqlbackup

Du brauchst nur /etc/cron.daily/automysqlbackup die datei mal nach /root/ kopieren, dann wird sie nicht mehr ausgeführt

bzgl. Debian der fehler den du hier siehst, kommt vom mysql selbst, um etwas zu sagen ist der Logauszug leider zu kurz
FrM222
FrM222 20.02.2023 um 14:53:22 Uhr
Goto Top
Hallo,

Du brauchst nur /etc/cron.daily/automysqlbackup die datei mal nach /root/ kopieren, dann wird sie nicht mehr ausgeführt
Muss ich diese Datei wirklich nur kopieren? Oder komplett verschieben?

bzgl. Debian der fehler den du hier siehst, kommt vom mysql selbst, um etwas zu sagen ist der Logauszug leider zu kurz
Debian hat sich für mich erledigt, ich habe einfach auch auf Ubuntu umgestellt.

Aber noch eine kurze andere Frage. Ich habe ein System mit einer PostgreSQL, funktioniert das da genauso nur mit autopostgresqlbackup? Oder muss ich bei der Konfiguration noch etwas anderes beachten?

Danke für deine Unterstützung.
godlie
godlie 20.02.2023 um 15:02:25 Uhr
Goto Top
Hallo,

ja natürlich verschieben nicht kopieren, mein Fehler.

Ob Debian oder Ubuntu ist nicht viel um...

Nein für Postgresql brauchst du was eigenes, hab ich aber keine Erfahrung mit, läuft bei mir alles nur mehr in DockerContainern und die Snapshote ich für Backups.

grüße
FrM222
FrM222 20.02.2023 um 15:51:37 Uhr
Goto Top
Hallo,

alles klar.
Vielen Dank für deine Hilfe, ich glaube jetzt läuft mein Backup-Prozess für mySQL soweit ganz gut.

Viele Grüße
FrM222
FrM222 22.02.2023 um 13:52:44 Uhr
Goto Top
Hallo godlie,

jetzt habe ich das Ganze auf vier Servern eingerichtet und die funktionieren ohne Probleme, aber beim fünften ist irgendwie vieles anders.
Es handelt sich hier ebenfalls einfach um ein Ubuntu 22.04.2
An sich funktioniert das automysqlbackup auch, es wird allerdings nicht wie bei allen anderen eine .sql.gz erstellt, sondern nur eine .sql-Datei. An sich nicht schlimm, aber komisch warum es hier anders ist... Kann ich das irgendwo einstellen oder beeinflussen? Vielleicht in der Konfigurationsdatei?

Außerdem wird hier beim automysqlbackup das POSTBACKUP-Skript irgendwie nicht ausgeführt. Händisch funktioniert es ohne Probleme, aber automatisch nach der Backuperstellung irgendwie nicht...
Ich habe keine Ahnung woran das liegen könnte, vielleicht hast du diesbezüglich ja auch eine Idee.

Danke und viele Grüße
godlie
godlie 22.02.2023 um 14:04:09 Uhr
Goto Top
Hallo,

poste doch mal deine /etc/default/automysqlbackup und das postbackup script vom 5ten server

grüße
FrM222
FrM222 22.02.2023 um 14:40:11 Uhr
Goto Top
Hallo,

hier der Inhalt von /etc/default/automysqlbackup (der Großteil ist einfach im Standard):
# By default, the Debian version of automysqlbackup will use:
# mysqldump --defaults-file=/etc/mysql/debian.cnf
# but you might want to overwrite with a specific user & pass.
# To do this, simply edit bellow.

# Username to access the MySQL server e.g. dbuser
#USERNAME=`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'` 

# Username to access the MySQL server e.g. password
#PASSWORD=`grep password /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'` 

# Host name (or IP address) of MySQL server e.g localhost
DBHOST=localhost

# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3" 
# Note that it's absolutely normal that the db named "mysql" is not in this 
# list, as it's added later by the script. See the MDBNAMES directives below 
# in this file (advanced options).
# This is ONLY a convenient default, if you don't like it, don't complain 
# and write your own.
# The following is a quick hack that will find the names of the databases by
# reading the mysql folder content. Feel free to replace by something else.
# DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ ` 
# This one does a list of dbs using a MySQL statement.
DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ |>  
# Backup directory location e.g /backups
# Folders inside this one will be created (daily, weekly, etc.), and the
# subfolders will be database names. Note that backups will be owned by
# root, with Unix rights 0600.
BACKUPDIR="/var/backups/mysql"  

# Mail setup
# What would you like to be mailed to you?
# - log   : send only log file
# - files : send log file and sql files as attachments (see docs)
# - stdout : will simply output the log to the screen if run manually.
# - quiet : Only send logs if an error occurs to the MAILADDR.
MAILCONTENT="quiet"  

# Set the maximum allowed email size in k. (4000 = approx 5MB email [see
# docs])
MAXATTSIZE="4000"  

# Email Address to send mail to? (user@domain.com)
MAILADDR="root"  

# ============================================================
# === ADVANCED OPTIONS ( Read the doc's below for details )=== 
#=============================================================

# List of DBBNAMES for Monthly Backups.
MDBNAMES="mysql $DBNAMES"  

# List of DBNAMES to EXLUCDE if DBNAMES are set to all (must be in " quotes) 
DBEXCLUDE=""  

# Include CREATE DATABASE in backup?
CREATE_DATABASE=yes

# Separate backup directory and file for each DB? (yes or no)
SEPDIR=yes

# Which day do you want weekly backups? (1 to 7 where 1 is Monday)
DOWEEKLY=6

# Which day of the month to execute the monthly backup (00 = no monthly backup)
# Two digit required
DOMONTHLY=01

# Choose Compression type. (gzip or bzip2)
COMP=gzip

# Compress backups on the fly with gzip or bzip2 (yes or no)
COMPDIRECT=no

# Compress communications between backup server and MySQL server?
COMMCOMP=no

# Additionally keep a copy of the most recent backup in a seperate
# directory.
LATEST=no

#  The maximum size of the buffer for client/server communication. e.g. 16MB
#  (maximum is 1GB)
MAX_ALLOWED_PACKET=

#  For connections to localhost. Sometimes the Unix socket file must be
#  specified.
SOCKET=

# Command to run before backups (uncomment to use)
PREBACKUP="/etc/mysql-backup-pre"  

# Command run after backups (uncomment to use)
POSTBACKUP="/etc/mysql-backup-post"  

# Backup of stored procedures and routines (comment to remove)
ROUTINES=yes

# Mysqldump additional option (like "--single-transaction") 
OPTIONS=""  

Und hier das Postbackup-Skript:
#!/bin/sh
rsync -a --delete /var/backups/mysql/daily/zabbix/ /mnt/zabbix
umount /mnt

Viele Grüße
godlie
godlie 22.02.2023 um 14:52:49 Uhr
Goto Top
Hallo,

also bzgl. der .sql.gz Geschichte: COMPDIRECT=no <-- setz das mal auf yes

bzgl. dem BackupScript: Pfad falsch oder chmod + x vergessen auf die /etc/mysql-backup-post
FrM222
FrM222 22.02.2023 um 15:07:51 Uhr
Goto Top
Hallo,

stimmt, wenn ich COMPDIRECT auf yes setze, kommt eine .sql.gz raus. Hab ich zwar bei den anderen auch nicht bewusst umgestellt, aber egal, so passt es. Danke.

bzgl. dem BackupScript: nein Pfad ist richtig und die Datei ist auch ausführbar. Wenn ich händisch
bash /etc/mysql-backup-post
ausführe, klappt es ohne Probleme.
godlie
godlie 22.02.2023 um 15:12:38 Uhr
Goto Top
Hallo,

vorsicht, bash /scriptname bedeutet nicht das die Datei ausführbar ist:

root@ro02 ~ # vi bashTest
root@ro02 ~ # bash bashTest
ehlo
root@ro02 ~ # ./bashTest
-bash: ./bashTest: Permission denied
root@ro02 ~ # chmod +x bashTest
root@ro02 ~ # ./bashTest
ehlo
root@ro02 ~ #

mach ein chmod +x /etc/mysql-backup-post und dann sollts jut sein
FrM222
FrM222 22.02.2023 um 15:53:22 Uhr
Goto Top
Hallo,

ich habe chmod +x /etc/mysql-backup-post nochmal ausgeführt.

ls -l /etc/mysql-backup-post
-rwxr-xr-x 1 root root 86 Feb 22 09:57 /etc/mysql-backup-post

Leider funktioniert es trotzdem noch nicht...
godlie
godlie 22.02.2023 um 16:15:04 Uhr
Goto Top
Hallo,

dann versuch es mal auszuführen mit /etc/mysql-backup-post evtl. läuft es ja in einen fehler
FrM222
FrM222 22.02.2023 um 16:28:31 Uhr
Goto Top
Hallo,

auch das funktioniert ohne Probleme.
Nur in Kombination mit dem automysqlbackup hängt es irgendwie.
Wenn ich automysqlbackup manuell ausführe, wird der Job auch nicht fertig, weil es eben scheinbar Probleme mit diesem Skript hat und sich dann aufhängt. Alles was vorher so passieren soll, läuft normal durch.
FrM222
FrM222 27.02.2023 um 11:22:40 Uhr
Goto Top
Hallo godlie,

frag mich nicht warum, aber nun funktioniert die automatische Ausführung. Ich glaube bei dem Server dauert das Post-Skript einfach extrem lange und ich war bisher immer zu ungeduldig und habe schon wieder weitergemacht, obwohl es noch nicht fertig war (dauert hier ca. 10 Minuten, bei den anderen nur wenige Sekunden...). Aber egal, hauptsache es läuft.

Nun wollte ich mal den Restore versuchen. Ich habe im Internet tausende Anleitungen gefunden, dass es mit diesem Befehl funktionieren sollte:
mysql -u root -p dbname < sicherung.sql
Hier sollte dann eigentlich noch die Passwortaufforderung kommen und gut ist.

Bei mir kommt leider keine Passwortabfrage, sondern direkt
-bash: /Verzeichnis/Sicherung.sql: Permission denied

Ich habe auch schon versucht das Passwort direkt im Klartext mit in den Befehl zu schreiben, aber ohne Erfolg. Ich bekomme immer ein "Permission denied".
Hast du hierzu evtl. noch eine Idee?

Danke und viele Grüße.
godlie
godlie 28.02.2023 um 11:02:44 Uhr
Goto Top
Hallo,

ich hab grad gesehen du hast das in einem seperaten Thread gelöst, ich bin nicht früher dazugekommen, zur Vollständigkeit für den Thread hier:

Es handelt sich um ein Permission Problem auf dem Sicherungsfile selbst, deswegen der Permission Denied