cronjob für die automatische Sicherung der Datenbank auf die Datumsvorwahldatei


12

Ich benutze die neueste Linux Mint. Ich habe mich gefragt, ob es möglich ist, einen speziellen Cronjob für eine Datenbanksicherung zu erstellen.

In meiner /etc/cronjobDatei habe ich den folgenden Code:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

In meinem habe /home/users/backup.shich:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

Anstelle von full_myDB.sqlmöchte ich so etwas wie haben, 2014-04-04_full_myDB.sqlwo das Datum abhängig von dem Datum, das wir haben, dynamisch hinzugefügt wird.

Wenn die SQL-Sicherungsdatei älter als eine Woche ist, möchte ich, dass der Cronjob sie automatisch löscht .

Antworten:


15

Mit GNU date(Standard unter Linux Mint) können Sie:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

So löschen Sie Dateien, die älter als 1 Woche sind:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

Obwohl es im Allgemeinen ratsam ist, vor dem Löschen zu prüfen, was Sie löschen (zumindest beim Testen Ihres Skripts):

find /home/users/backup_MyDB -type f -mtime +7

Ich habe die Antwort vorbereitet, aber du hast mich geschlagen: P
Ramesh

2
@Ramesh, bin froh, dass ich zur Abwechslung jemand anderen geschlagen habe - normalerweise poste ich und jemand hat bereits eine ähnliche Antwort.
Graeme

Sehr schön. Das Einzige, was ich für meine Verwendung ändere, ist die Angabe der Datenbankzugriffsdaten in einer .my.cnf-Datei.
Johann Dyck

4

Ich habe die obigen Informationen verwendet und wollte ein weiteres kleines Update bereitstellen, das tatsächlich eine der wirklich großen Tabellen abschneidet, die unsere Sicherungen verlangsamt haben.

Hoffentlich hilft das jemand anderem.

Unter Verwendung der obigen Informationen habe ich ein einfaches Shell-Skript namens mysqlbackup.sh mit folgendem Inhalt erstellt:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

Stellen Sie sicher, dass Sie Folgendes ausführen: chmod + x mysqlbackup.sh

Ich habe dies auch in mein crontab -e eingefügt:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1

3

Ich weiß, es ist ein großer alter, aber ich habe die obigen Antworten verwendet und eine Anweisung zur Dateikomprimierung hinzugefügt. Hoffentlich findet das jemand anderes nützlich.

1) Ein bisschen recherchiert, scheint 7-zip der beste Kompressor da draußen zu sein. Wenn Ihre Linux-Distribution dies unterstützt, können Sie das apt-Installationsprogramm verwenden:

sudo apt-get install p7zip-full

Alternativ können Sie tar.gz verwenden, wenn Sie sich damit wohler fühlen.

2) Dann erstellen Sie ein Skript, zum Beispiel /home/users/backup.sh mit dem Inhalt:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

Dieses Skript findet die Dateien mit mehr als 7 Tagen und löscht sie. Anschließend wird ein SQL-Dump erstellt. Anschließend werden alle .sql-Dateien im Verzeichnis 7-gepackt. Anschließend werden alle .sql-Dateien im Verzeichnis gelöscht. Übrigens können Sie optional einen mysql-Befehl vor dem Speicherauszug hinzufügen (wie in der vorherigen Antwort angegeben, falls erforderlich).

3) Wir machen ein, chmod +x /home/users/backup.shdamit es ausführbar sein kann.

3.1) Sie sollten Ihr Skript testen, wenn es wie vorgesehen funktioniert

4) Wir programmieren die Aufgabe mit crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

Und das ist es. Es sichert Ihre MySQL-Datenbank jeden Tag in der Woche um 4:30 Uhr (außer sonntags) und komprimiert die Sicherung


1

Um die Antwort von @ Graeme zu ergänzen, ist es möglicherweise erwähnenswert, dass Sie manchmal das Zeichen '%' in einem Cron-Job maskieren müssen, damit es so aussieht:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.