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

Detaillierte Erklärung zur Verwendung des Schlüsselworts ESCAPE in MySQL

MySQL-Escape Escape bedeutet die ursprüngliche Se...

Implementierungscode für die HTML-Drag & Drop-Funktion

Basierend auf Vue Die Kernidee dieser Funktion be...

Liste der HTML-Tags und Hinweise zur Verwendung

Liste der HTML-Tags markieren Typ Name oder Bedeu...

Zusammenfassung der Erfahrungen mit der Verwendung des Div-Box-Modells

Berechnung des Boxmodells <br />Rand + Rahme...

Einführung in die Verwendung von Unicode-Zeichen in Webseiten (&#, \u usw.)

Die ersten Computer konnten nur ASCII-Zeichen ver...

Lösung für den Fehler 1045, wenn Navicat eine Verbindung zu MySQL herstellt

Beim Herstellen einer Verbindung mit der lokalen ...

Was bedeutet Eingabetyp und wie kann die Eingabe begrenzt werden?

Gängige Methoden zur Begrenzung der Eingabe 1. Um ...

CentOS8-Installationstutorial für JDK8/Java8 (empfohlen)

Vorwort Zuerst wollte ich es mit wget auf CentOS8...

Implementierungsbeispiel für dynamische Routing-Breadcrumbs für Elemente

Zu meistern: localStorage, Komponentenkapselung Ä...

React erhält den Eingabewert und übermittelt 2 Methodenbeispiele

Methode 1: Verwenden Sie das Zielereignisattribut...

Vue implementiert ein einfaches Einkaufswagenbeispiel

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