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

Welche Nachteile hat die Bereitstellung der Datenbank in einem Docker-Container?

Vorwort Docker erfreut sich seit zwei Jahren groß...

Detailliertes Tutorial zur Installation von MySQL unter Linux

MySQL-Downloads für alle Plattformen sind unter M...

Zusammenfassung der für MySQL erforderlichen allgemeinen Kenntnisse

Inhaltsverzeichnis Primärschlüsseleinschränkung E...

Detaillierte Schritte zur Yum-Konfiguration des Nginx-Reverse-Proxys

Teil.0 Hintergrund Die Intranetserver des Unterne...

Ideen und Codes zur Implementierung des Wasserfall-Flow-Layouts im UniApp-Applet

1. Einleitung Gilt es als Aufwärmen alter Themen,...

Beispiele und Vergleich von 3 Methoden zur Deduplizierung von JS-Objekt-Arrays

Inhaltsverzeichnis 1. Vergleich der Daten vor und...

Detaillierte Schritte zum Einrichten des Hosts Nginx + Docker WordPress Mysql

Umfeld Linux 3.10.0-693.el7.x86_64 Docker-Version...

Der Unterschied zwischen schreibgeschützt und deaktiviert

Um es zusammenzufassen: „Nur lesen“ ist nur für Ei...

Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen

Tutorial zur Netzwerknutzung Offizielle Website d...

Detaillierte Erklärung zum Anpassen des Stils von CSS-Bildlaufleisten

Dieser Artikel stellt den CSS-Bildlaufleistensele...

Einige Dinge, die Sie über den Varchar-Typ in MySQL wissen sollten

Speicherregeln für varchar In Versionen unter 4.0...

Kombinieren von XML- und CSS-Stilen

student.xml <?xml version="1.0" enco...