Übersicht
Dieser Artikel beschreibt ein MySQL-Datenbank-Backup-Skript, mit dem Sie ein automatisiertes tägliches (oder häufigeres) datumsgestempeltes und komprimiertes Backup Ihrer MySQL-Datenbanken implementieren können. Der Vorteil der Verwendung dieses Skripts besteht darin, dass es alle Datenbanken sichert, sie in einem Verzeichnis (/data/db-backups) speichert und seine Aktivitäten in einer Datei in (/logs/db-backup) zur Überwachung und Überprüfung protokolliert bei Problemen.
Idealerweise muss das Skript mit CRON automatisiert werden, sodass zumindest täglich eine vollständige Sicherung jeder Datenbank erfolgt. Dies ermöglicht Ihnen ein gewisses Maß an Wiederherstellbarkeit im Falle von Fehlern in Ihrer Datenbank oder hilft bei der einfachen Migration Ihrer Datenbank(en) auf ein anderes System. Wie alle automatisierten Prozesse sollte es nach der Installation für immer Backups erstellen, daher müssen Sie sicherstellen, dass alte Backups entfernt werden, damit Ihre Festplatten nicht voll werden.
Das Skript
Das Skript ist ein einfaches, sauberes BASH-Shell-Skript, das auf CentOS Linux Distribution getestet wurde, aber auf anderen Linux-Varianten mit wenig bis gar keinen Änderungen ausgeführt werden kann.
- Schneiden Sie den folgenden Text aus, fügen Sie ihn in einen Editor ein und nehmen Sie nach Bedarf Änderungen vor, um die Funktionalität zu erweitern oder zu reduzieren.
#!/bin/bash # mysql-backup.sh # use mysqldump to Dump DB and compress it on the fly to a mounted partition # BACKUP_DIR="/data/db-backups" mkdir -p $BACKUP_DIR chmod 777 $BACKUP_DIR # # SERIAL="`date +%Y%m%d-%H%M%S`" #===================================== # Log Functions # function LogStart { echo "====== Log Start =========" >> $LF echo "Time: `date`" >> $LF echo " " >> $LF } function LogEnd { echo " " >> $LF echo "Time: `date`" >> $LF echo "====== Log End =========" >> $LF } #===================================== # # function GetDBList { echo "Calling GetDBList()" >> $LF mysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Databases > $DBLIST } #===================================== # # function DoBackup { echo "Calling DoBackup()" >> $LF DBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sql echo "Host [$H]" >> $LF echo "DB File [$DBFILE]" >> $LF if [ -a $DBFILE ] then mv $DBFILE $DBFILE.`date '+%M%S'` fi echo "Dumping ${DB}" >> $LF mysqldump -B ${DB} --add-drop-database --add-drop-table >> ${DBFILE} echo "Zipping up file!" >> $LF gzip ${DBFILE} echo "Done!" >> $LF } FILE_DATE=`date '+%Y-%m-%d'` LF_DIR=/logs/db-backup LF=$LF_DIR/db-backup-$FILE_DATE.log mkdir -p $LF_DIR chmod 777 $LF_DIR touch $LF chmod 664 $LF DBLIST=/tmp/dblist-$FILE_DATE.list LogStart #===================================== # # MAIN Code Start GetDBList while read line do echo "Backuping up: $line" H="localhost" DB=$line DoBackup done < $DBLIST echo "All backups Completed" >> $LF LogEnd # # EOF
Testen der Sicherung
- Um zu überprüfen, ob das Backup-Skript funktioniert, führen Sie zuerst den Backup-Befehl wie folgt aus:
/usr/local/bin/mysql-backups.sh
- Führen Sie dann eine Verzeichnisliste von /data/db-backup durch Verzeichnis, das vom Skript erstellt wurde, sollten Sie einige Dateien sehen, die jeweils Ihre komprimierte, gesicherte Datenbank darstellen!
[root@yourserver]#ls -l /data/db-backups -rw-r--r-- 1 root root 510 Mar 5 15:21 db-information_schema-20140305-152103.sql.gz -rw-r--r-- 1 root root 526 Mar 5 15:22 db-information_schema-20140305-152229.sql.gz -rw-r--r-- 1 root root 142122 Mar 5 15:21 db-mysql-20140305-152103.sql.gz -rw-r--r-- 1 root root 142283 Mar 5 15:22 db-mysql-20140305-152229.sql.gz .... [root@yourserver]#
Automatisierung des Skripts
Das Skript sollte in einem Verzeichnis namens /usr/local/bin abgelegt werden . Dieses Verzeichnis ist speziell für vom Benutzer geschriebene systemrelevante Skripte vorgesehen.
Das Skript sollte vom Root-Benutzer ausführbar gemacht werden, verwenden Sie den folgenden Befehl, um die Datei als ausführbar zu kennzeichnen:
"chmod 744 /usr/local/bin/mysql-backup.sh"
Um die Ausführung des Skripts zu automatisieren, verwenden wir die CRON-Anwendung, also fügen wir unserer Crontab mit dem Befehl "crontab -e" eine Zeile hinzu , dies öffnet einen Editor und wir fügen eine Zeile wie folgt hinzu:
30 22 * * * /usr/local/bin/mysql-backups.sh > /dev/null 2>&1
Im Grunde ermöglicht dies, dass das Skript jeden Tag um 22:30 Uhr ausgeführt wird. Außerdem werden alle Ausgaben des Programms ausgeblendet, wenn das Programm auf der Festplatte protokolliert wird.
Wiederherstellung
Um eine Sicherung wiederherzustellen, verwenden Sie gunzip, um die Datei zu dekomprimieren, und verwenden Sie dann mysql
Hier ist ein typisches Beispiel dafür, was Sie ausführen müssen:
Warnung:Seien Sie sehr vorsichtig bei dem, was Sie tun, da Sie Ihre Datenbank überschreiben, wenn Sie einen Fehler machen.
Wenn Sie Ihren Server sichern, sollten Sie erwägen, die Dateien automatisch auf einen anderen Server zu kopieren und sie automatisch wiederherzustellen. Dadurch haben Sie eine Produktionskopie ausgewählter Datenbanken für interne Test- und Auditzwecke.
cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql
Wohin von hier aus?