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 .

pbaldauf
quelle

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
Graeme
quelle
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
Jason Ruyle
quelle
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

Gusstavv Gil
quelle
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
frezq
quelle