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

MySQL-Datumsfunktionen und Datumskonvertierungs- und -formatierungsfunktionen

MySQL ist eine kostenlose relationale Datenbank m...

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Ein vorläufiges Verständnis der benutzerdefinierten CSS-Eigenschaften

Heute sind CSS-Präprozessoren der Standard für di...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.24

MySQL ist das beliebteste relationale Datenbankma...

Ubuntu 20.04 CUDA- und cuDNN-Installationsmethode (grafisches Tutorial)

CUDA-Installation, cuda herunterladen Geben Sie d...

Probleme und Lösungen bei der Installation und Verwendung von VMware

Die virtuelle Maschine wird verwendet oder es kan...

Detaillierter Prozess der Bereitstellung von Docker für WSL2 in IDEA

Die lokale Umgebung ist Windows 10 + WSL2 (Ubuntu...

So erstellen Sie manuell ein neues Image mit Docker

In diesem Artikel wird die Methode zum manuellen ...

Detaillierte Beispiele zur Float-Verwendung in HTML/CSS

1. Grundlegende Anwendungsbeispiele für Float 1. ...

Asynchroner Lebenszyklus von AsyncHooks in Node8

Async Hooks ist eine neue Funktion von Node8. Sie...