GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Skriptgesteuerte MySQL-Datenbanksicherungen

Ü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.

  1. 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

  1. 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
  2. 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:

cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql

Warnung:Seien Sie sehr vorsichtig bei dem, was Sie tun, da Sie Ihre Datenbank überschreiben, wenn Sie einen Fehler machen.

Wohin von hier aus?

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.


Linux
  1. Häufig gestellte Fragen zur MySQL-Bereitstellung

  2. So kopieren Sie eine MySQL-Datenbank

  3. Verbessern Sie das Cachen von MySQL-Datenbanken

  4. MySQL-Benutzer- und Datenbankgrundlagen

  5. MySQL-Datenbank vom USB-Stick

PHP MySQL Select-Daten

Tabellen in einer MySQL-Datenbank auflisten

So sichern Sie die WordPress-Datenbank über MySQL

MySQL-Datenbankserver

Wie man eine Datenbank in MySQL erstellt

MySQL-Übersicht