1. SicherungVor dem Sichern müssen Sie einen Backup-Benutzer anlegen. Sie können auch den Root-Benutzer verwenden, um direkt zu sichern, dies ist jedoch nicht Standard. Erstellen Sie den Benutzer „backup@'localhost'“ mit der Identifizierung „123456“; Gewähren Sie Neuladen, Verarbeiten, Sperren von Tabellen, Replikationsclient auf *.* an Backup@localhost. 1.1 Vollständig vorbereitetSichern Sie die gesamte Bibliothek mit dem Backup-Benutzer. Die Sicherungsdatei wird unter /backup/ gespeichert. innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 /backup/ 1.2 Zusätzliche VorbereitungGibt inkrementelle Sicherungen unter Verwendung des Backup-Benutzers an. Die inkrementelle Basis ist die letzte vollständige Sicherung und wurde mit --incremental-basedir angegeben. Die Sicherungsdatei wird in /backup/ gespeichert. innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 --incremental --incremental-basedir=/backup/2021-06-01_14-44-54 /backup/ 2 Sicherung und Wiederherstellung2.1 DatenaufbereitungMachen Sie nicht festgeschriebene Transaktionen rückgängig und synchronisieren Sie festgeschriebene Transaktionen mit Datendateien, um die Datendateien konsistent zu machen. innobackupex --apply-log --redo-only /backup/2021-06-01_14-44-54/ 2.2 WiederherstellungVor der Wiederherstellung müssen Sie sicherstellen, dass das MySQL-Datenverzeichnis gelöscht wurde. innobackupex --copy-back --datadir=/usr/local/mysql/data /backup/2021-06-01_14-44-54/ Nach der Wiederherstellung müssen Sie die Berechtigungen für das MySQL-Datenverzeichnis erneut erteilen: chown -R mysql:mysql-Daten/ An diesem Punkt ist die Wiederherstellung abgeschlossen. 3 Verzeichnisstruktur4 Backup-Skripte4.1 SkripteBackup.sh #!/bin/bash # Holen Sie sich den Programmpfadnamen program_dir=`dirname $0`/.. # Alle Variablenwerte in der Konfigurationsdatei lesen und als globale Variablen festlegen# Konfigurationsdatei conf_file="$program_dir/conf/backup.conf" #mysql-Benutzer Benutzer=`sed '/^Benutzer=/!d;s/.*=//' $conf_file` #mysql-Passwort Passwort=`sed '/^Passwort=/!d;s/.*=//' $conf_file` #mysql-Sicherungsverzeichnis backup_dir=`sed '/^backup_dir=/!d;s/.*=//' $conf_file` #mysql Backup-Komprimierungspaketverzeichnis gzip_dir=`sed '/^gzip_dir=/!d;s/.*=//' $conf_file` # percona-xtrabackup-Befehl xtrabackup-Pfad xtrabackup_bin=`sed '/^xtrabackup_bin=/!d;s/.*=//' $conf_file` #mysql-Präfixkennung für vollständige Sicherung full_backup_prefix=`sed '/^full_backup_prefix=/!d;s/.*=//' $conf_file` #mysql inkrementeller Präfixbezeichner increment_prefix=`sed '/^increment_prefix=/!d;s/.*=//' $conf_file` #Sicherungsfehlerprotokolldatei error_log=$program_dir/var/`sed '/^error_log=/!d;s/.*=//' $conf_file` #Indexdatei sichern index_file=$program_dir/var/`sed '/^index_file=/!d;s/.*=//' $conf_file` # Sicherungsdatum backup_date=`date +%F` # Sicherungszeit backup_time=`date +%H-%M-%S` # Der Wochentag für die Sicherung backup_week_day=`date +%u` # Erstellen Sie das entsprechende Verzeichnis log_dir=$program_dir/log/backup var_dir=$Programmverzeichnis/var mkdir -p $backup_dir mkdir -p $log_dir mkdir -p $var_dir mkdir -p $gzip_dir # Vollständiges Backup Funktion full_backup() { Backup-Ordner = ${full_backup_prefix}_${Backup_date}_${Backup_time}_${Backup_week_day} mkdir -p $Backup-Verzeichnis/$Backup-Ordner $xtrabackup_bin \ --user=$Benutzer \ --password=$passwort \ --Backup \ --target-dir=$Sicherungsverzeichnis/$Sicherungsordner > $Logverzeichnis/${Sicherungsordner}.log 2>&1 zurückgeben $? } # Inkrementelles Backup Funktion increment_backup() { Backup-Ordner = ${Inkrementpräfix}_${Backup-Datum}_${Backup-Zeit}_${Backup-Wochentag} incr_base_folder=`sed -n '$p' $index_file | \ awk -F '[, {}]*' '{print $3}' | \ awk -F ':' '{print $2}'` mkdir -p $Backup-Verzeichnis/$Backup-Ordner $xtrabackup_bin \ --user=$Benutzer \ --password=$passwort \ --Backup \ --target-dir=$Sicherungsverzeichnis/$Sicherungsordner \ --incremental-basedir=$backup_dir/$incr_base_folder > $log_dir/${backup_folder}.log 2>&1 zurückgeben $? } # Löschen Sie das vorherige Backup (wird normalerweise nach Abschluss des vollständigen Backups verwendet) Funktion delete_before_backup() { Katze $index_datei | awk -F '[, {}]*' '{print $3}' | \ awk -v Backup-Verzeichnis=$Backup-Verzeichnis -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", Backup-Verzeichnis, $2)}}' | \ /bin/bash Katze $index_file | awk -F '[, {}]*' '{print $3}' | \ awk -v gzip_dir=$gzip_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", gzip_dir, $2)}}' | \ /bin/bash Katze $index_file | awk -F '[, {}]*' '{print $3}' | \ awk -v log_dir=$log_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s.log\n", log_dir, $2)}}' | \ /bin/bash } #Indexdatei sichern Funktion backup_index_file() { cp $index_file ${index_file}_$(date -d "vor 1 Tag" +%F) } #Indexdatei sichern Funktion send_index_file_to_remote() { # ./expect_scp IP-Adresse Konto Passwort ${index_file} Zielserver Ordner Portnummer echo 'sende Indexdatei ok' } # Einen Index hinzufügen, der das letzte Backup aufzeichnet function append_index_to_file() { echo "{Wochentag:$backup_Wochentag, \ dir:${1}_${Sicherungsdatum}_${Sicherungszeit}_${Sicherungswochentag}, \ Typ: ${1}, \ Datum: ${Backup_Datum}}" >> $Indexdatei } # Fehlermeldungen in eine Datei protokollieren function logging_backup_err() { echo "{Wochentag:$backup_Wochentag, \ dir:${1}_${Sicherungsdatum}_${Sicherungszeit}_${Sicherungswochentag}, \ Typ: ${1}, \ Datum: ${backup_date}}" >> $error_log } # Löschen Sie den Index Funktion purge_index_from_file() { > $index_datei } # Fehlerprotokollinformationen löschen Funktion purge_err_log() { > $Fehlerprotokoll } #Paketsicherungsfunktion tar_backup_file() { cd $backup_dir tar -jcf ${gzip_dir}/${1}_${Sicherungsdatum}_${Sicherungszeit}_${Sicherungswochentag}.tar.bz2 \ ${1}_${Sicherungsdatum}_${Sicherungszeit}_${Sicherungwochentag} cd -> /dev/null rm -rf ${Sicherungsverzeichnis}/${1}_${Sicherungsdatum}_${Sicherungszeit}_${Sicherungswochentag} } # Backup an Remote-Funktion senden send_backup_to_remote() { # ./expect_scp IP-Adresse Konto Passwort ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 Zielserverordner Portnummer echo "send $1 remote ok" } # Bestimmen Sie, ob eine vollständige oder inkrementelle Sicherung durchgeführt werden soll# 0:full, 1:incr Funktion get_backup_type() { Sicherungstyp = 0 wenn [ 1 -eq `Datum +%H` ]; dann Sicherungstyp = 0 anders Sicherungstyp = 1 fi berühren Sie $index_file wenn [ ! -n "`cat $index_file`" ]; dann Sicherungstyp = 0 fi returniere $backup_type } # Testen Sie die Richtigkeit der Konfigurationsdateifunktion test_conf_file() { # Überprüfen Sie, ob jede Variable in der Konfigurationsdatei konfiguriert ist. Wenn nicht, beenden Sie das Programm if [ ! -n "$user" ]; dann echo 'fail: configure file user not set'; exit 2; fi if [ ! -n "$password" ]; then echo 'fail: configure file password not set'; exit 2; fi if [ ! -n "$backup_dir" ]; dann echo 'Fehler: Konfigurationsdatei backup_dir nicht festgelegt'; exit 2; fi if [ ! -n "$gzip_dir" ]; dann echo 'fail: Konfigurationsdatei backup_dir nicht gesetzt'; exit 2; fi if [ ! -n "$full_backup_prefix" ]; dann echo 'fail: Konfigurationsdatei full_backup_prefix nicht gesetzt'; exit 2; fi if [ ! -n "$increment_prefix" ]; dann echo 'fail: Konfigurationsdatei increment_prefix nicht gesetzt'; exit 2; fi if [ ! -n "$error_log" ]; dann echo 'fail: Konfigurationsdatei error_log nicht gesetzt'; exit 2; fi if [ ! -n "$index_file" ]; then echo 'fail: configure file index_file not set'; exit 2; fi } # Funktion main() ausführen { # Erkennungskonfigurationsdateiwert test_conf_file # Bestimmen Sie, ob eine vollständige oder inkrementelle Sicherung durchgeführt werden soll get_backup_type Sicherungstyp = $? Fall $backup_type in 0 ) # Vollständige Sicherung full_backup backup_ok=$? wenn [ 0 -eq "$backup_ok" ]; dann # Vollständige Sicherung erfolgreich# Packen Sie die neueste tar_backup_file $full_backup_prefix # # Senden Sie das Tar-Backup an Remote send_backup_to_remote $full_backup_prefix #Indexdatei sichern backup_index_file # Löschen Sie das vorherige Backup delete_before_backup # Löschen Sie die Indexdatei purge_index_from_file # Fügen Sie einen Index hinzu, der das letzte Backup aufzeichnet. append_index_to_file $full_backup_prefix # Indexdatei an Remote senden send_index_file_to_remote anders # Vollständige Sicherung fehlgeschlagen # Löschen Sie das Sicherungsverzeichnis rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day} # Protokollierungsfehlerprotokoll logging_backup_err $full_backup_prefix fi ;; 1) # Inkrementelles Backup increment_backup backup_ok=$? wenn [ "$backup_ok" -eq 0 ]; dann # Inkrementelles Backup erfolgreich # Packen Sie das neueste Backup tar_backup_file $increment_prefix # # Tar-Backup an Remote senden send_backup_to_remote $increment_prefix # Fügen Sie einen Index hinzu, der das letzte Backup aufzeichnet. append_index_to_file $increment_prefix # # Indexdatei an Remote senden send_index_file_to_remote anders # Inkrementelles Backup fehlgeschlagen # Löschen Sie das Backup-Verzeichnis rm -rf ${backup_dir}/${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day} # Fehlerprotokoll aufzeichnen logging_backup_err $increment_prefix fi ;; esac } hauptsächlich 4.2 KonfigurationsdateienBackup.conf #mysql Benutzername Benutzer=Backup #mysql-Passwort password=123456 # Sicherungspfad backup_dir=/data/backup # Verzeichnis des Backup-Komprimierungspakets gzip_dir=/data/backups/backups_zip # innobackupex-Befehlspfad xtrabackup_bin=/opt/xtrabackup/bin/xtrabackup #Präfix des Namens der vollständigen Sicherungsinformationen full_backup_prefix=full #Inkrementelles Backup-Informationsnamenpräfix increment_prefix=incr # Fehlerprotokolldatei (anhand dieser Datei wird festgestellt, ob die Sicherung erfolgreich war) # Format: # {Wochentag:1,Dir:voll/incr_2015-12-29_00-00-00_7,Typ:voll/incr,Datum:2015-12-30} error_log=mysql_increment_hot_backup.err # Indexdatei# Format: # {Wochentag:1,Dir:voll/incr_2015-12-29_00-00-00_7,Typ:voll/incr,Datum:2015-12-30} index_file=mysql_increment_hot_backup.index 5 Wiederherstellungsskripte5.1 Skriptewiederherstellen.sh #!/bin/bash # Holen Sie sich den Programmpfadnamen program_dir=`dirname $0`/.. # Alle Variablenwerte in der Konfigurationsdatei lesen und als globale Variablen festlegen# Konfigurationsdatei conf_file="$program_dir/conf/restore.conf" # MySQL-Datenordner data_dir=`sed '/^data_dir=/!d;s/.*=//' $conf_file` # Pfad der Sicherungsindexdatei backup_index_file=`sed '/^backup_index_file=/!d;s/.*=//' $conf_file` # percona-xtrabackup-Befehl xtrabackup-Pfad xtrabackup_bin=`sed '/^xtrabackup_bin=/!d;s/.*=//' $conf_file` # Sicherungsdateiverzeichnis backup_restore_dir=`sed '/^backup_restore_dir=/!d;s/.*=//' $conf_file` # Überprüfen Sie die Richtigkeit der Konfigurationsdateifunktion exam_conf_file() { # Überprüfen Sie, ob jede Variable in der Konfigurationsdatei konfiguriert ist. Wenn nicht, beenden Sie das Programm if [ ! -n "$data_dir" ]; dann echo 'fail: configure file data_dir not set'; exit 2; fi if [ ! -n "$backup_index_file" ]; dann echo 'Fehler: Konfigurationsdatei backup_index_file nicht festgelegt'; exit 2; fi if [ ! -n "$xtrabackup_bin" ]; dann echo 'fail: Konfigurationsdatei xtrabackup_bin nicht gesetzt'; exit 2; fi if [ ! -n "$backup_restore_dir" ]; dann echo 'Fehler: Konfigurationsdatei backup_restore_dir nicht festgelegt'; exit 2; fi } # Überprüfen Sie, ob die Sicherungsdatei im komprimierten Format vorliegt Funktion exam_backup_restore_file(){ file_backup_restore_name_arr=`ls $backup_restore_dir` für Dateiname in $file_backup_restore_name_arr;do wenn [ "${file_name##*.}"x = "bz2"x ];dann tar -jxf $backup_restore_dir/$file_name -C $backup_restore_dir rm -rf $backup_restore_dir/$dateiname fi Erledigt } # Prüfen, ob MySQL gestoppt ist Funktion exam_mysql_is_stop(){ wenn [ 0 -eq `ps -ef | grep mysql | grep -v grep | wc -l` ]; dann echo "MySQL-Dienst wurde gestoppt" anders /etc/init.d/mysqld stoppen echo "MySQL-Dienst stoppen" Schlaf 3 echo "MySQL-Dienst wurde gestoppt" fi } # Prüfen, ob MySQL-Datendatei gelöscht wurde Funktion exam_data_is_del(){ wenn [ -d $data_dir ];dann echo "MySQL-Datendateien löschen" rm -rf $data_dir anders echo "MySQL-Datendateien wurden gelöscht" fi } # Lesen Sie die Backup-Indexdatei Funktion read_backup_index() { cat $backup_index_file | awk '{print $2}' | awk -F: '{print $2}' | awk '{sub(/.$/,"")}1' } # Vollständige Dateien vorbereiten Funktion ready_full(){ vollständiger_Dateiname=`echo ${1} | awk '{print $1}'` $xtrabackup_bin/innobackupex \ --apply-log \ --redo-only \ $backup_restore_dir/$vollständiger_dateiname echo "Alle Dateien sind bereit" } # Dateien zum Hinzufügen vorbereiten Funktion ready_incr(){ Backup-Index = $ (Backup-Index lesen) vollständiger_Dateiname=`echo $backup_index | awk '{print $1}'` für Dateiname in $backup_index;do wenn [ 1 -eq `echo "$file_name" | grep incr | wc -l` ]; dann $xtrabackup_bin/innobackupex \ --apply-log \ --redo-only \ $backup_restore_dir/$vollständiger_Dateiname \ --incremental-dir=$Backup_Restore_Dir/$Dateiname fi Erledigt echo "Weitere Dateien sind bereit" } # Führen Sie die Sicherungs- und Wiederherstellungsfunktion aus exec_backup_restore(){ echo "Sicherung und Wiederherstellung starten" vollständiger_Dateiname=`echo ${1} | awk '{print $1}' ` $xtrabackup_bin/innobackupex \ --zurückkopieren \ --datadir=$data_dir \ $backup_restore_dir/$vollständiger_dateiname } # Funktion main() ausführen { # Überprüfen Sie die Richtigkeit der Konfigurationsdatei exam_conf_file # Überprüfen Sie, ob die Sicherungsdatei im komprimierten Format vorliegt exam_backup_restore_file # Prüfen, ob MySQL gestoppt ist exam_mysql_is_stop # Prüfen, ob die MySQL-Datendatei gelöscht ist exam_data_is_del # Lesen Sie die Indexdatei backup_index=$(read_backup_index) # Vollständige Sicherungsdatei vorbereiten ready_full $backup_index # Bereiten Sie das Hinzufügen der Datei ready_incr vor # Backup ausführen und wiederherstellen exec_backup_restore $backup_index # Berechtigungen für die Datendatei erteilen echo „Berechtigungen für das Datenverzeichnis erneut erteilen“ chown -R mysql:mysql $data_dir echo "MySQL wird gestartet" /etc/init.d/mysqld starten echo "Sicherung und Wiederherstellung erfolgreich" } hauptsächlich 5.2 Konfigurationsdateienwiederherstellen.conf #MySQL-Datenordner data_dir=/opt/mysql/data #Pfad der Sicherungsindexdatei backup_index_file=/opt/xtrabackup/backup/var/mysql_increment_hot_backup.index #xtrabackup bin-Verzeichnis xtrabackup_bin=/opt/xtrabackup/bin # Sicherungsdateiverzeichnis backup_restore_dir=/data/backups/backups_zip Oben finden Sie Einzelheiten zur Verwendung von Xtrabackup zum Sichern und Wiederherstellen von MySQL. Weitere Informationen zum Sichern und Wiederherstellen von MySQL mit Xtrabackup finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Tutorial zur Installation und Nutzungskonfiguration von Docker+nacos+seata1.3.0
Best Practices für die Web-Frontend-Optimierung: ...
Inhaltsverzeichnis MySQLs current_timestamp-Falle...
Docker installieren Sie müssen Docker installiere...
[LeetCode] 180. Aufeinanderfolgende Zahlen Schrei...
Inhaltsverzeichnis 1. Vue-Initialisierung Vue-Ein...
Inhaltsverzeichnis 1. Nachfrage Methode 1 Methode...
Installieren Sie die entpackte Version von Mysql ...
Lassen Sie uns zu Beginn darüber sprechen, was La...
Durch die Verwendung von iFrames können problemlo...
Abfrage-Cache 1. Funktionsprinzip des Abfrage-Cac...
Szenario: Ein Prüfdokument hat n Prüfdetails und ...
In diesem Artikelbeispiel wird der spezifische Co...
Uniapp-Code <Vorlage> <Ansicht> <i...
bgcolor="Textfarbe" background="Hin...
Nehmen Sie als Beispiel die Installation von MySQ...