Heim  >  Artikel  >  Datenbank  >  Detaillierte Erklärung, wie ein MySQL-Backup-Skript funktioniert

Detaillierte Erklärung, wie ein MySQL-Backup-Skript funktioniert

零下一度
零下一度Original
2017-05-03 13:56:141187Durchsuche

Skriptbeschreibung

Alle Daten alle 7 Tage sichern und binlog jeden Tag sichern, was eine inkrementelle Sicherung ist

(Wenn weniger Daten vorhanden sind, sichern Sie einfach die vollständige Sicherung Daten einmal am Tag, es ist möglicherweise nicht möglich. Inkrementelles Backup ist notwendig)

Der Autor ist nicht sehr vertraut mit Shell-Skripten, daher sind viele Stellen sehr dumm geschrieben :)

Bin-Log aktivieren

In der MySQL 4.1-Version gibt es standardmäßig nur Fehlerprotokolle und keine anderen Protokolle. Sie können das Bin-Protokoll öffnen, indem Sie die Konfiguration ändern. Eine davon besteht darin, den MySQL-Abschnitt in / hinzuzufügen. etc/my.cnf:

[mysqld]

log-bin

Die Hauptfunktion dieses Protokolls ist die inkrementelle Sicherung oder Replikation (es kann andere Verwendungszwecke geben).

Wenn Sie eine inkrementelle Sicherung wünschen, müssen Sie dieses Protokoll öffnen.

Bei MySQL mit häufigen Datenbankoperationen wird dieses Protokoll sehr groß und es kann mehrere Flushes geben -logs in der Datenbank oder verwenden Sie mysqladmin, mysqldump, um Flush-Logs aufzurufen und die Parameter delete-master-logs zu verwenden. Diese Protokolldateien verschwinden und neue Protokolldateien werden generiert (zunächst leer).

Wenn Sie also nie ein Backup durchführen, ist das Einschalten des Protokolls möglicherweise nicht erforderlich.

Abgeschlossen Sie können Flush-Logs während des Backups und Flush-Logs vor dem inkrementellen Backup aufrufen, um die neuesten Daten zu sichern.

Vollständiges Sicherungsskript

Wenn viele Datenbankdaten vorhanden sind, sichern wir die Daten normalerweise ein paar Tage oder einmal pro Woche, um den Anwendungsbetrieb nicht zu beeinträchtigen Es spielt keine Rolle, ob Sie einmal am Tag ein Backup erstellen. Unter der Annahme, dass unsere Datenmenge relativ groß ist, lautet das Backup-Skript wie folgt: (Siehe ein MySQL-Backup-Skript im Internet, danke :) )

Das obige Skript sichert MySQL im lokalen Verzeichnis /backup/mysql und die inkrementellen Sicherungsdateien werden im Verzeichnis /backup/mysql/daily abgelegt.

Hinweis: Das obige Skript überträgt die gesicherten Dateien nicht auf andere Remote-Computer und löscht auch nicht die Sicherungsdateien von vor ein paar Tagen: Der Benutzer muss relevante Skripte hinzufügen oder manuell
#!/bin/sh
# mysql data backup script
# by scud http://www.jscud.com
# 2005-10-30
#
# use mysqldump --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqldump --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables > $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir

Inkrementelle Sicherung

durchführen

Das Datenvolumen der inkrementellen Sicherung ist relativ gering, sie muss jedoch auf der Grundlage einer vollständigen Sicherung durchgeführt werden. Benutzer können Zeit und Kosten abwägen und die Methode wählen, die für sie am vorteilhaftesten ist.

Inkrementell Das Bin-Protokoll wird wie folgt für die Sicherung verwendet:

Das inkrementelle Sicherungsskript dient dazu, die Protokolle vor der Sicherung automatisch in die Datei zu kopieren und dann eine Datei zu erstellen Neue Protokolldatei, daher müssen wir nur die ersten paar sichern, d Um die Datei zu erkennen, ist es nicht erforderlich, sie zu sichern, wenn sie gesichert wurde.

Hinweis: Ebenso muss der Benutzer sie auch aus der Ferne senden, dies ist jedoch nicht der Fall Sie müssen es löschen. Das Programm generiert es automatisch nach einer vollständigen Sicherung.
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"

Zugriffseinstellungen

Damit das Skript ausgeführt werden kann, müssen der entsprechende Benutzername und das entsprechende Kennwort eingegeben werden Sowohl mysqladmin als auch mysqldump müssen festgelegt werden. Natürlich können sie in das Skript geschrieben werden, aber es ist sehr praktisch, dieses Skript auszuführen , dann müssen wir eine .my.cnf-Datei in /root (also dem Home-Verzeichnis des Root-Benutzers) mit dem folgenden Inhalt erstellen

Hinweis: Stellen Sie diese Datei so ein, dass sie nur von gelesen werden kann root. (chmod 600 .my.cnf)

Diese Datei gibt an, dass das Programm den Root-Benutzer von MySQL verwendet, um Daten zu sichern, und das Passwort ist die entsprechende Einstellung. Auf diese Weise ist es nicht erforderlich, das zu schreiben Benutzer im Skriptnamen und Passwort.

Automatisch ausführen

Damit das Sicherungsprogramm automatisch ausgeführt wird, müssen wir es zu crontab hinzufügen.
[mysqladmin]
password =password
user= root
[mysqldump]
user=root
password=password

Es gibt zwei Methoden Eine Möglichkeit besteht darin, das Skript entsprechend Ihren Anforderungen hinzuzufügen. Die Option besteht darin, es in Verzeichnissen wie /etc/cron.daily und /etc/cron.weekly abzulegen. Eine Möglichkeit besteht darin, crontab -e zu verwenden Fügen Sie es in die geplanten Aufgaben des Root-Benutzers ein, z. B. ein vollständiges Backup jede Woche. Es wird jeden Tag um 3 Uhr morgens ausgeführt und das tägliche Backup wird jeden Montag bis Samstag um 3 Uhr morgens ausgeführt

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie ein MySQL-Backup-Skript funktioniert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn