So automatisieren Sie MySQL-Datenbanksicherungen mit einem Shell-Skript
Backups sind unerlässlich, um Ihre Daten sicher zu halten, und die Automatisierung des Sicherungsprozesses kann Ihnen sowohl Zeit als auch Mühe sparen. Wenn Ihre Datenbank jemals verloren geht oder beschädigt wird, kann eine aktuelle Sicherung ein Lebensretter sein.
Regelmäßige Backups sind entscheidend für jede Website oder Anwendung, die eine MySQL-Datenbank verwendet. Die Automatisierung dieses Prozesses stellt sicher, dass Backups regelmäßig erstellt werden, ohne dass man daran denken muss, sie manuell durchzuführen.
In diesem Leitfaden zeigen wir Ihnen, wie Sie ein einfaches Bash-Skript erstellen, um MySQL-Datenbanksicherungen zu automatisieren. Anschließend richten wir einen Cron-Job ein, der dieses Sicherungsskript automatisch zu geplanten Zeiten ausführt, um sicherzustellen, dass Ihre Datenbanken zuverlässig gesichert werden.
Schritt 1: Erstellen eines MySQL-Backup-Skripts
Zuerst lassen Sie uns ein einfaches Bash-Skript erstellen, das den Backup-Prozess übernimmt.
nano backup_mysql.sh
Kopiere und füge das folgende Skript in die Datei backup_mysql.sh ein:
#!/bin/bash
MySQL Credentials
MYSQL_USER="your_mysql_username"
MYSQL_PASS="your_mysql_password"
MYSQL_HOST="localhost"
Backup Directory (ensure this directory exists)
BACKUP_DIR="/path/to/your/backup/directory"
Email settings
EMAIL_TO="[email "
EMAIL_SUBJECT="MySQL Backup Report - $(date +"%Y-%m-%d %H:%M:%S")"
EMAIL_BODY=""
Get current date to append to backup filename
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
Databases to back up (list the names of the databases you want to back up)
DATABASES=("db1" "db2" "db3")
Loop through each database and back it up
for DB in "${DATABASES[@]}"; do
BACKUP_FILE="$BACKUP_DIR/$DB_$DATE.sql"
echo "Backing up database $DB to $BACKUP_FILE..."
# Perform the backup using mysqldump
mysqldump -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST $DB > $BACKUP_FILE
# Check if the backup was successful
if [ $? -eq 0 ]; then
echo "Backup of $DB completed successfully!"
else
echo "Backup of $DB failed!"
fi
done
Clean up backups older than 30 days (optional)
find $BACKUP_DIR -type f -name "*.sql" -mtime +30 -exec rm -f {} \;
Send email alert
echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$EMAIL_TO"
Was macht dieses Skript?
- MySQL-Zugangsdaten: Sie müssen Ihren MySQL-Benutzernamen, Ihr Passwort und Ihren Host (normalerweise localhost) angeben.
- Sicherungsverzeichnis: Hier werden Ihre Sicherungen gespeichert. Stellen Sie sicher, dass dieses Verzeichnis auf Ihrem System existiert.
- Zeitgestempeltes Backup: Das Skript erstellt Backups mit einem Zeitstempel (z. B. 2025-04-28_12-30-00.sql), um das Überschreiben alter Backups zu vermeiden.
- Datenbanken zum Sichern: Listen Sie im
DATABASES-Array die Namen der Datenbanken auf, die Sie sichern möchten. Sie können Datenbanken nach Bedarf hinzufügen oder entfernen. - Backup-Befehl: Das Skript verwendet mysqldump, um Sicherungen Ihrer Datenbanken zu erstellen.
- Alte Sicherungen bereinigen: Das Skript löscht auch Sicherungen, die älter als 30 Tage sind (Sie können diese Zeit nach Bedarf anpassen).
- E-Mail-Benachrichtigungen: Nach dem Ausführen des Backups sendet das Skript eine E-Mail mit den Ergebnissen – ob jedes Datenbank-Backup erfolgreich war oder fehlgeschlagen ist.
Backup mit dem Remote-Server synchronisieren (Optional, aber empfohlen)
Nachdem Ihr lokales Backup erstellt wurde, ist es eine kluge Entscheidung, es zur zusätzlichen Sicherheit auf einen entfernten Server zu synchronisieren, was sicherstellt, dass Ihre Backups selbst dann überleben, wenn Ihr Hauptserver abstürzt.
Hier ist der rsync-Befehl, den Sie am Ende Ihres Backup-Skripts hinzufügen können:
# Sync backup to remote server (optional but recommended)
SSH_KEY="/path/to/your/private/key.pem" # Path to your SSH private key
REMOTE_USER="your_remote_user" # Remote server username
REMOTE_HOST="your.remote.server.com" # Remote server address
REMOTE_DIR="/path/on/remote/server" # Target directory on remote server
rsync -avz \
-e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" \
--delete-after \
"$BACKUP_DIR/" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
Stellen Sie sicher, dass der Remote-Server erreichbar ist und das Zielverzeichnis mit den richtigen Schreibrechten existiert.
Sobald Sie Ihr Skript gespeichert haben, machen Sie es ausführbar, indem Sie den chmod-Befehl ausführen:
chmod +x backup_mysql.sh
Schritt 2: Testen des MySQL-Backup-Skripts
Bevor Sie den Cron-Job einrichten, ist es eine gute Idee, das Skript manuell zu testen, um sicherzustellen, dass alles wie erwartet funktioniert.
./backup_mysql.sh
Überprüfen Sie Ihr Backup-Verzeichnis, um sicherzustellen, dass die Backups erfolgreich erstellt wurden. Wenn alles gut aussieht, fahren Sie mit dem nächsten Schritt fort.
Schritt 3: Automatisierung von MySQL-Backups mit Cron-Jobs
Jetzt, wo wir das Backup-Skript haben, besteht der nächste Schritt darin, es mit Cron zu automatisieren, einem Werkzeug, das Befehle zu geplanten Zeiten ausführt.
crontab -e
Fügen Sie einen Cron-Job hinzu, um das Backup-Skript automatisch auszuführen. Zum Beispiel, um das Skript jeden Tag um 2 Uhr morgens auszuführen, fügen Sie die folgende Zeile hinzu:
0 2 * * * /bin/bash /path/to/your/backup_mysql.sh
So funktioniert der Cron-Zeitplan:
0: Die Minute (0. Minute).2: Die Stunde (2 Uhr morgens).*: Jeder Tag des Monats.*: Jeden Monat.*: Jeder Tag der Woche.
Um zu überprüfen, ob Ihr Cron-Job ausgeführt wird, können Sie die Systemprotokolle überprüfen oder das Skript vorübergehend so einstellen, dass es zu einer näheren Zeit ausgeführt wird, um zu sehen, ob es funktioniert.
grep CRON /var/log/syslog
Zusätzliche Überlegungen
- Sicherheit: Das Speichern Ihres MySQL-Passworts im Skript ist praktisch, aber nicht sicher. Für bessere Sicherheit können Sie Ihre Anmeldedaten in einer
.my.cnf-Datei in Ihrem Heimatverzeichnis speichern und das Skript so konfigurieren, dass es von dort liest. - Sicherungsort: Stellen Sie sicher, dass das Sicherungsverzeichnis genügend Platz für Ihre Sicherungen hat. Wenn Sie mehrere Sicherungen durchführen, ist es eine gute Idee, einen separaten Speicherort einzurichten (wie eine externe Festplatte oder Cloud-Speicher).
- Sicherungsfrequenz: Je nachdem, wie oft sich Ihre Daten ändern, möchten Sie möglicherweise den Cron-Job-Zeitplan anpassen. Zum Beispiel könnten Sie die Sicherung jede Stunde, jede Woche oder nur an bestimmten Tagen ausführen.
Fazit
Indem Sie MySQL-Backups mit einem einfachen Bash-Skript und einem Cron-Job automatisieren, stellen Sie sicher, dass Ihre Datenbanken regelmäßig sicher gesichert werden, ohne dass Sie daran denken müssen, dies manuell zu tun. Mit nur wenigen Zeilen Code können Sie ein automatisches Backup-System einrichten, das in den von Ihnen gewünschten Intervallen läuft.