Ideen und Methoden zur inkrementellen Sicherung einer MySQL-Datenbank

Ideen und Methoden zur inkrementellen Sicherung einer MySQL-Datenbank

Um eine inkrementelle Sicherung der MySQL-Datenbank durchzuführen, müssen Sie nur die Datenbankkonfigurationsdatei /etc/my.cnf ändern, um die Binärprotokollfunktion zu aktivieren. Als nächstes habe ich einige Methoden im Internet zu Rate gezogen und selbst geschrieben. Das Wichtigste war, einige seiner Ideen und Methoden zu lernen.

#Funktion: Inkrementelles MySQL-Backup #Version: 1.0.0
#Autor: Wangyanlin
#Datum: 02.08.2017
#---------------------------------------------------------------------------------------------
#!/bin/sh
export LANG=en_US.UTF-8
#Zeit einstellen DATE=`date +%Y%m%d`
#Informationen festlegen USER=root
PASSWORT=withub
#Legen Sie den Pfad cd / fest
/usr/bin/mkdir -p mysql_bak/daily 
/usr/bin/mkdir -p mysql_bak/logs
BakDir=/mysql_bak/daily
BinDir=/var/lib/mysql
LogFile=/mysql_bak/logs/Daily_$DATE.log
BinlogFile=/var/lib/mysql/mysql-bin.index
/usr/bin/mysqladmin -u$USER -p$PASSWORD flush-logs #Protokoll leeren Zähler=`wc -l $BinlogFile | awk '{print $1}'`
NächsteNummer=0
start_time=`Datum +'%J-%m-%d %H:%M:%S'`
echo `date +"%Y Jahr%m Monat%d Tag%H:%M:%S"` $Next1 Backup starten! >> $LogFile
#Diese For-Schleife wird verwendet, um die beiden Werte von $Counter und $NextNum zu vergleichen, um festzustellen, ob die Datei existiert oder die neueste ist.
für Datei in „cat $BinlogFile“
Tun
  base=`Basisname $file`
  #basename wird verwendet, um den Dateinamen mysql-bin.00000* abzufangen und das ./ vor ./mysql-bin.000005 zu entfernen.
  NächsteNummer=`Ausdruck $NächsteNummer + 1`
  wenn [ $NächsteNum -eq $Zähler ]
  Dann
    echo $base überspringen! >> $LogFile
  anders
    dest=$BakDir/$base
    wenn(test -e $dest)
    #test -e wird verwendet, um festzustellen, ob die Zieldatei existiert. Wenn sie existiert, schreibt „exist!“ in $LogFile.
    Dann
      echo $base existiert! >> $LogFile
    anders
      cp $BinDir/$base $BakDir
      echo $base kopieren >> $LogFile
    fi
  fi
Erledigt
echo `date +"%Y Jahr%m Monat%d Tag%H:%M:%S"` $Next2 Sicherung erfolgreich! >> $LogFile
Endzeit = `Datum + '%J-%m-%d %H:%M:%S'`
start_seconds=$(Datum --date="$start_time" +%s);
end_seconds=$(Datum --date="$end_time" +%s);
echo "Laufzeit dieser Sicherung: "$((end_seconds-start_seconds))"s" >> $LogFile

Fügen Sie eine geplante Aufgabe hinzu:

crontab -e

00 03 * * * /root/MySQL_incrementbak.sh #Starten Sie das inkrementelle Backup jeden Tag um 3:00 Uhr

Der Effekt des Protokollausdrucks ist wie folgt:

PS: Werfen wir einen Blick auf die MySQL-Voll- und inkrementellen Backup-Skripte

Gesamtbetrag:

[root@master leo]# cat DBfullBak.sh 
#!/bin/bash
#Verwenden Sie mysqldump, um MySQL-Daten vollständig zu sichern
BakDir=/root/leo/full
LogFile=/root/leo/full/bak.log
Datum=`Datum +%Y%m%d`
Beginn=`Datum +"%Y Jahr%m Monat%d Tag%H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
mysqldump -uroot -p123456 --alle Datenbanken --alle Tabellen sperren --Routinen --Trigger --Events --Master-Data=2 --Flush-Logs > $DumpFile
tar zcvf $GZDumpFile $DumpFile
rm $DumpFile
Letztes=`Datum +"%Y Jahr%m Monat%d Tag%H:%M:%S"`
echo Start: $Begin Ende: $Last $GZDumpFile succ >> $LogFile

Parameterhinweise:

--all-databases #Alle Datenbanken sichern --lock-all-tables #Lesesperren zu allen Tabellen hinzufügen --routinge #Gespeicherte Prozeduren und Funktionen --triggers #Auslösen --events #Ereignisse aufzeichnen --master-data=2 #Aktuelle Position des Binärlogs in der Sicherungsdatei aufzeichnen und mit Anmerkungen versehen. 1 ist nicht auskommentiert und hat bei der Master-Slave-Replikation eine Bedeutung --flush-logs #Einmaliges Rollen des Logs

Die Ergebnisse sind wie folgt:

[root@master voll]# ls
20140728.sql.tgz bak.log
[root@master voll]# cat bak.log 
Beginn: 2014-07-28 19:02:59 Ende: 2014-07-28 19:02:59 20140728.sql.tgz erfolgreich
Beginn: 2014-07-28 19:12:01 Ende: 2014-07-28 19:12:01 20140728.sql.tgz erfolgreich
[root@master voll]#

Inkrementelles Backup:

[root@master leo]# cat DBDailyBak.sh 
#!/bin/bash
BakDir=/root/leo/binlog/
BinDir=/var/lib/mysql
LogFile=/root/leo/binlog/bak.log
BinFile=/var/lib/mysql/mysql-bin.index
mysqladmin -uroot -p123456 Protokolle leeren
Zähler=`wc -l $BinFile|awk '{print $1}'`
NächsteNummer=0
für Datei in „cat $BinFile“
Tun 
 base=`Basisname $file`
 NächsteNummer=`Ausdruck $NächsteNummer + 1`
 wenn [ $NächsteNum -eq $Zähler ]
 Dann
  echo $base überspringen! >> $LogFile
 anders
  dest=$BakDir/$base
  wenn(test -e $dest)
  Dann
   echo $base existiert! >> $LogFile
  anders
   cp $BinDir/$base $BakDir/
   echo $base kopieren >> $LogFile
  fi
 fi
Erledigt
echo `date +"%Y Jahr%m Monat%d Tag%H:%M:%S"` $Nächste Sicherung erfolgreich~ >> $LogFile

Zusammenfassen

Oben ist die vom Herausgeber vorgestellte Idee und Methode zur inkrementellen Sicherung einer MySQL-Datenbank. Ich hoffe, dass sie für alle hilfreich ist. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • So implementieren Sie eine geplante Sicherung einer MySQL-Datenbank
  • So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist
  • 8 Möglichkeiten zum manuellen und automatischen Sichern Ihrer MySQL-Datenbank
  • Beispiel einer vom ThinkPHP-Framework implementierten MySQL-Datenbank-Sicherungsfunktion
  • Details zur geplanten Datenbanksicherung und Datenwiederherstellung bei Navicat für MySQL
  • Linux führt jeden Tag eine automatische und geplante Sicherung der MySQL-Datenbank durch
  • Automatische Sicherung der MySQL-Datenbank per Shell-Skript
  • So importieren und exportieren Sie MySQL-Datenbanken (Sichern und Wiederherstellen)
  • Codebeispiele für die Sicherung mehrerer MySQL-Datenbanken

<<:  Fehlerbehebungsprozess für Docker-Container, bei dem nach der Portzuordnung plötzlich keine Verbindung mehr hergestellt werden kann

>>:  Vue-CLI - Aufzeichnung der Schritte zur mehrseitigen Verzeichnisverpackung

Artikel empfehlen

js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

In diesem Artikel wird der spezifische Code von j...

Einfache Implementierung von HTML zum Erstellen eines persönlichen Lebenslaufs

Lebenslauf-Code: XML/HTML-CodeInhalt in die Zwisc...

Erläuterung der Truncate Table-Verwendung

TRUNCATE-TABELLE Löscht alle Zeilen in einer Tabe...

Diskussion über die Möglichkeit zum Öffnen von Website-Hyperlinks

Ein neues Fenster wird geöffnet. Vorteile: Wenn d...

Über nginx zur Implementierung des Jira-Reverse-Proxys

Zusammenfassung: Nginx-Reverse-Proxy für JIRA kon...

So installieren und verwenden Sie Server-U Version 14

Einführung der Server-U-Software Server-U ist ein...

Eine schnelle Lösung für den ersten Anmeldefehler in mysql5.7.20

Zunächst stellen wir vor, wie (1) MySQL 5.7 hat e...

So stellen Sie Docker-Containerdaten wieder her

Die Datenbankdaten der Projekttestumgebung sind v...

Zusammenfassung der Fallstricke beim Importieren von OVA-Dateien in VMware

Quelle des Problems Wie wir alle wissen, erzeugt ...