Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte der relationalen MySQL-Datenbank 1. Beschreibung der Backup-Strategie1. Arten der SicherungTyp 1:
Typ 2:
Typ 3:
2. Zu berücksichtigende Faktoren für die Datensicherung
3. Backup-Ziel
4. Backup-Tools
Verwendung: Shell> mysqldump [Optionen] Datenbankname [Tabellenname ...] Shell> mysqldump [Optionen] --databases db_name … shell> mysqldump [Optionen] --all-databases Optionen: -A: Alle Bibliotheken sichern -B db_name1,[db_name2,...]: Die angegebene Bibliothek sichern -E: Alle zugehörigen Ereignisplaner sichern -R: Alle gespeicherten Prozeduren und gespeicherten Funktionen sichern --triggers: Tabellenbezogene Trigger sichern, standardmäßig aktiviert, verwenden Sie --skip-triggers, um Trigger nicht zu sichern --master-data={1|2}: 1: Fügen Sie vor den gesicherten Daten einen Datensatz als CHANGE MASTER TO-Anweisung hinzu, ohne Kommentar. Wenn nichts angegeben ist, ist der Standardwert 1. 2: CHANGE MASTER TO-Anweisung als Kommentar aufgezeichnet. Hinweis: Diese Option deaktiviert automatisch die Funktion --lock-tables und aktiviert automatisch die Funktion --lock-all-tables (es sei denn, --single-transaction ist aktiviert). -F: Protokoll vor dem Sichern rollen. Nach dem Sperren der Tabelle den Befehl „flush logs“ ausführen, um eine neue binäre Protokolldatei zu generieren. Bei Verwendung mit -A werden mehrere Datenbankaktualisierungen durchgeführt. Wenn Sie gleichzeitig einen Dump und eine Protokollaktualisierung durchführen, sollten Sie gleichzeitig --flush-logs und -x, --master-data oder --single-transaction verwenden. In diesem Fall nur einmal aktualisieren. Empfehlung: Mit -x, --master-data oder --single-transaction verwenden. --compact Kommentare entfernen, geeignet zum Debuggen, wird in der Produktion nicht verwendet. -d: Nur die Tabellenstruktur sichern. -t: Nur die Daten sichern, nicht die erstellte Tabelle. -n: Datenbankerstellung nicht sichern, kann durch -A oder -B überschrieben werden --flush-privileges: Autorisierungstabelle vor dem Sichern aktualisieren, erforderlich zum Sichern von MySQL-Datenbanken oder Ähnlichem -f: SQL-Fehler ignorieren und Ausführung fortsetzen --hex-blob: Hexadezimale Notation zum Dumpen binärer Spalten verwenden (zum Beispiel wird aus „abc“ 0x616263), betroffene Datentypen sind BINARY, VARBINARY, BLOB, BIT -q: Abfragen nicht zwischenspeichern, direkt ausgeben, Backup beschleunigen
InnoDB-Sicherungsoptionen: Hot Backup wird unterstützt, Warm Backup ist verfügbar, wird aber nicht empfohlen --single-transaction: Diese Option wird für Innodb und nicht für MyISAM empfohlen. Diese Option führt den Befehl START TRANSACTION aus, um die Transaktion zu starten, bevor mit der Sicherung begonnen wird. Diese Option erstellt einen konsistenten Snapshot, indem alle Tabellen in einer einzigen Transaktion gesichert werden. Gilt nur für Tabellen, die in Speicher-Engines gespeichert sind, die Multiversioning unterstützen (derzeit tut dies nur InnoDB). Die Konsistenz des Dumps mit anderen Speicher-Engines kann nicht garantiert werden. Um beim Ausführen eines einzelnen Transaktionsdumps eine gültige Dump-Datei (korrekter Tabelleninhalt und Position des Binärprotokolls) sicherzustellen, müssen Sie sicherstellen, dass keine anderen Verbindungen die folgenden Anweisungen verwenden: ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. Diese Option und die Option --lock-tables (die implizit ausstehende Transaktionen festschreibt) schließen sich gegenseitig aus. Beim Sichern großer Tabellen wird empfohlen, die Option --single-transaction in Verbindung mit der Option --quick zu verwenden. InnoDB empfiehlt die folgende Backup-Strategie: mysqldump –uroot –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql Von MyISAM empfohlene Sicherungsstrategie: mysqldump –uroot –A –F –E –R –x --master-data=1 --flush-privileges --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql
Das von Percona bereitgestellte MySQL-Datenbank-Backup-Tool ist ein Open-Source-Tool, das Hot-Backups von InnoDB- und XtraDB-Datenbanken durchführen kann. xtrabackup wird zum Sichern von InnoDB-Tabellen verwendet, jedoch nicht von Nicht-InnoDB-Tabellen. Das Skript innobackupex wird zum Sichern von Nicht-InnoDB-Tabellen verwendet. Es ruft auch den Befehl xtrabackup zum Sichern von InnoDB-Tabellen auf und sendet Befehle zur Interaktion mit MySQL Server, z. B. zum Hinzufügen einer globalen Lesesperre (FTWRL) und zum Abrufen eines Standorts (SHOW SLAVE STATUS). Das heißt, innobackupex wird als Kapselungsschicht über xtrabackup implementiert; Obwohl MyISAM-Tabellen derzeit im Allgemeinen nicht verwendet werden, sind nur die Systemtabellen unter der MySQL-Datenbank MyISAM, sodass die Sicherung grundsätzlich über den Befehl innobackupex durchgeführt wird. Nach dem Upgrade der xtrabackup-Version auf 2.4 gibt es im Vergleich zur vorherigen Version 2.1 relativ große Änderungen: Alle innobackupex-Funktionen sind in xtrabackup integriert, mit nur einem Binärprogramm. Darüber hinaus wird innobackupex aus Kompatibilitätsgründen als Softlink von xtrabackup verwendet, d. h. xtrabackup unterstützt jetzt Nicht-Innodb-Tabellensicherungen und Innobackupex wird in der nächsten Version entfernt. Es wird empfohlen, innobackupex durch xtrabackup zu ersetzen. Wenn Sie innobakupex zur Sicherung verwenden, wird xtrabackup aufgerufen, um alle InnoDB-Tabellen zu sichern, alle zugehörigen Dateien zur Tabellenstrukturdefinition (.frm) sowie zugehörige Dateien der MyISAM-, MERGE-, CSV- und ARCHIVE-Tabellen zu kopieren und auch Dateien zu sichern, die mit Triggern und Datenbankkonfigurationsinformationen in Zusammenhang stehen. Diese Dateien werden in einem Verzeichnis gespeichert, das nach der Uhrzeit benannt ist. Während der Sicherung erstellt innobackupex außerdem die folgenden Dateien im Sicherungsverzeichnis:
Verwendung: innobackupex --user=DBUSER --password=DBUSERPASS /Pfad/zum/BACKUP-DIR/ Optionen: --user: Diese Option gibt das Sicherungskonto an --password: Diese Option gibt das Sicherungskennwort an --host: Diese Option gibt die Adresse der Sicherungsdatenbank an --databases: Der von dieser Option akzeptierte Parameter ist der Datenname. Wenn Sie mehrere Datenbanken angeben möchten, müssen diese durch Leerzeichen getrennt werden; zum Beispiel: „xtra_test dba_test“. Gleichzeitig können Sie beim Angeben einer Datenbank auch nur eine Tabelle darin angeben. Beispiel: „mydatabase.mytable“. Diese Option ist für InnoDB-Engine-Tabellen ungültig, aber alle InnoDB-Tabellen werden gesichert. --defaults-file: Diese Option gibt die Datei an, aus der die MySQL-Konfiguration gelesen werden soll. Sie muss an der ersten Optionsposition in der Befehlszeile stehen. --incremental: Diese Option bedeutet, dass eine inkrementelle Sicherung erstellt wird. Sie müssen --incremental-basedir angeben. --incremental-basedir: Diese Option gibt das Verzeichnis der vorherigen vollständigen oder inkrementellen Sicherung an und wird zusammen mit --incremental verwendet. --incremental-dir: Diese Option gibt das Verzeichnis der inkrementellen Sicherung während der Wiederherstellung an. --include=name: Geben Sie den Tabellennamen an, Format: Datenbankname.Tabellenname --apply-log: Im Allgemeinen können die Daten nach Abschluss der Sicherung nicht für Wiederherstellungsvorgänge verwendet werden, da die gesicherten Daten möglicherweise Transaktionen enthalten, die noch nicht festgeschrieben wurden, oder Transaktionen, die festgeschrieben, aber noch nicht mit der Datendatei synchronisiert wurden. Daher befindet sich die Datendatei derzeit noch in einem inkonsistenten Zustand. Diese Option wird verwendet, um die Datendatei konsistent zu machen, indem nicht festgeschriebene Transaktionen zurückgesetzt und festgeschriebene Transaktionen mit der Datendatei synchronisiert werden. --use-memory: Diese Option wird zusammen mit der Option --apply-log verwendet. Beim Vorbereiten einer Sicherung wird die von xtrabackup für die Wiederherstellung nach einem Systemabsturz zugewiesene Speichergröße in Byte angegeben. Auch verfügbar (1MB, 1M, 1G, 1GB), 1G wird empfohlen --export: Gibt an, dass eine separate Tabelle exportiert und dann in andere MySQLs importiert werden kann. --redo-only: Diese Option wird verwendet, wenn ein vollständiges Basis-Backup vorbereitet und inkrementelle Backups darin zusammengeführt werden. --copy-back: Beim Wiederherstellen von Daten wird die Backup-Datendatei in das Datenverzeichnis des MySQL-Servers kopiert. --move-back: Diese Option ist ähnlich zu --copy-back, der einzige Unterschied besteht darin, dass die Datei nicht kopiert, sondern an das Ziel verschoben wird. Diese Option entfernt die Sicherungsdatei und sollte mit Vorsicht verwendet werden. Anwendungsszenario: Es ist nicht genügend Speicherplatz vorhanden, um sowohl Datendateien als auch Sicherungskopien aufzubewahren Beachten:
2. Backup-Plan1. cp + tar == physisches Cold-Backup
1) Sicherung: ~]# mkdir /backup ~]# systemctl stop mariadb #Dienst stoppen~]# tar Jcf /backup/mariadb_all.tar.xz /var/lib/mysql/ #Backup verpacken und komprimieren]# systemctl start mariadb 2) Wiederherstellen: ~]# systemctl stop mariadb ~]# rm /var/lib/mysql/ -rf #Löschen Sie die beschädigte Bibliothek~]# cd /backup/ Backup]# tar xf mariadb_all.tar.xz #Entpacken Sie die gepackte Datenbankdatei Backup]# cp -av var/lib/mysql/ /var/lib/ #Backup wiederherstellen]# systemctl start mariadb #Starten Sie den Dienst und führen Sie die Wiederherstellung erfolgreich durch 2. LVM-Snapshot + Binlog == fast physischer Hot-Standby + inkrementelles Backup1) Backup: Das Datenbankverzeichnis muss auf dem logischen LVM-Volume gespeichert werden ~]# systemctl stop mariadb ~]# rm /var/lib/mysql/ -rf #Löschen Sie die beschädigte Bibliothek~]# cd /backup/ Backup]# tar xf mariadb_all.tar.xz #Entpacken Sie die gepackte Datenbankdatei Backup]# cp -av var/lib/mysql/ /var/lib/ #Backup wiederherstellen]# systemctl start mariadb #Starten Sie den Dienst und führen Sie die Wiederherstellung erfolgreich durch Bereiten Sie die LVM-Umgebung vor: ~]# pvcreate /dev/sda5 ~]# vgcreate vg0 /dev/sda5 ~]# lvcreate -n lv_data -L 10G vg0 ~]# lvcreate -n lv_binlog -L 10G vg0 ~]# mkfs.xfs /dev/vg0/lv_data ~]# mkfs.xfs /dev/vg0/lv_binlog ~]# mkdir -pv /data/{mysqldb,binlog} #Datenverzeichnis und Binärprotokollspeicherverzeichnis erstellen~]# chown -R mysql:mysql /data/ ~]# vim /etc/fstab UUID=4e3d726a-d420-4c1e-812b-da315012ba86 /data/mysqldb xfs-Standardwerte 0 0 UUID=6dd98866-769f-4369-8738-291fbcc94ca1 /data/binlog xfs-Standardwerte 0 0 Konfigurieren Sie die Datenbank und simulieren Sie die Generierung großer Datenmengen: ~]# yum installiere MariaDB-Server -y ~]# vim /etc/my.cnf [mysqld] datadir = /data/mysqldb #Geben Sie den Datenbankspeicherpfad an log_bin = /data/binlog/mariadb-bin #Aktivieren Sie die binäre Protokollierung und speichern Sie sie im angegebenen Pfad innodb_file_per_table = ON #Aktivieren Sie für jede Tabelle einen separaten Tablespace~]# systemctl start mariadb ~]# mysql #Verbindung zur Datenbank herstellen. Benutzername und Passwort werden hier weggelassen. Die folgenden sind gleich. MariaDB [(keine)]> CREATE DATABASE school; #Testbibliothek erstellen MariaDB [(keine)]> use school MariaDB [Schule]> CREATE TABLE testtb (id int auto_increment primary key,name char(30),age int default 20); #Datentabelle erstellen MariaDB [Schule]> DELIMITER // #Anweisungsabschlusszeichen in „//“ ändern MariaDB [Schule]> CREATE PROCEDURE pro_testtb() #Schreiben Sie eine gespeicherte Prozedur, um 100.000 Datensätze zum Testen zu generieren-> BEGIN -> deklariere i int; -> setze i = 1; -> solange i < 100000 -> führen Sie INSERT INTO testtb(Name, Alter) VALUES (CONCAT('Testbenutzer', i), i) aus; -> SETZE i = i + 1; -> ENDE während; -> ENDE// MariaDB [Schule]> DELIMITER; #Denken Sie daran, das Anweisungsabschlusszeichen wieder zu ändern. MariaDB [Schule]> CALL pro_testtb; #Rufen Sie die gespeicherte Prozedur auf. MariaDB [Schule]> SELECT COUNT(*) FROM testtb; #Überprüfen Sie, ob die Tabelle 100.000 Datensätze enthält. +----------+ | ANZAHL(*) | +----------+ | 99999 | +----------+ Sicherung starten: MariaDB [Schule]> FLUSH TABLES WITH READ LOCK; #Denken Sie daran, die Tabelle vor dem Sichern zu sperren, um zu verhindern, dass Benutzer weiter schreiben. MariaDB [Schule]> FLUSH LOGS; #Scrollen Sie durch das Binärprotokoll. MariaDB [Schule]> SHOW MASTER LOGS; #Überprüfen Sie den Speicherort des Binärprotokolls. +--------------------+-----------+ | Protokollname | Dateigröße | +--------------------+-----------+ | mariadb-bin.000001 | 30334 | | mariadb-bin.000002 | 1038814 | | mariadb-bin.000003 | 29178309 | | mariadb-bin.000004 | 528 | | mariadb-bin.000005 | 245 | #Notieren Sie diese Ausgabe, wir werden sie später brauchen+--------------------+-----------+ ~]# lvcreate -L 5G -n lv_mysql_snap -s -pr /dev/vg0/lv_data #Sie müssen ein anderes Terminal öffnen, um einen Snapshot zu erstellen. Beenden Sie das MySQL-Terminal nichtMariaDB [school]> UNLOCK TABLES; #Entsperren Sie den Snapshot so schnell wie möglich nach seiner Erstellung. Seien Sie vorsichtig mit Benutzerbeschwerden~]# mount -o nouuid,norecovery /dev/vg0/lv_mysql_snap /mnt/ #Mounten Sie den Snapshot in /mnt ~]# cp -av /mnt/ /backup #Daten in das Backup-Verzeichnis kopieren~]# umount /mnt/ ~]# lvremove /dev/vg0/lv_mysql_snap #Nach Abschluss des Kopiervorgangs löschen Sie den Snapshot sofort, um die Serverleistung zu beeinträchtigen. Die vollständige Sicherung ist jetzt abgeschlossen~ Noch ein paar Daten: MariaDB [Schule]> CALL pro_testtb; #Simulieren wir das Einfügen von 100.000 Datensätzen. MariaDB [Schule]> SELECT COUNT(*) FROM testtb; +----------+ | ANZAHL(*) | +----------+ | 199998 | #Jetzt gibt es 200.000 Datensätze+----------+ 2) Wiederherstellen: Datenbankbeschädigung simulieren: ~]# rm -rf /data/mysqldb/* #Server stürzt ab, kein BB mehr, einfach die Bibliothek löschen~]# systemctl stop mariadb #Dienst stoppen Wiederherstellung starten: ~]# cp -av /backup/* /data/mysqldb/ #cp die gesicherten Dateien in das entsprechende Bibliotheksverzeichnis. Fügen Sie skip_networking unter [mysqld] in /etc/my.cnf hinzu, um Benutzern die Verwendung der Datenbank zu untersagen und das Schreiben von Daten während des Wiederherstellungsprozesses zu verhindern. ~]# systemctl start mariadb #Starten Sie den Dienst ~]# ls -1 /data/binlog/ #Zeigen Sie die Anzahl der Binärprotokolldateien an mariadb-bin.000001 mariadb-bin.000002 mariadb-bin.000003 mariadb-bin.000004 mariadb-bin.000005 mariadb-bin.000006 mariadb-bin.index ~]# mysqlbinlog --start-position=245 /data/binlog/mariadb-bin.000005 > binlog.sql #Daten nach dem Zeitpunkt der vollständigen Sicherung~]# mysqlbinlog /data/binlog/mariadb-bin.000006 >> binlog.sql #Alle nachfolgenden Daten an dieselbe SQL-Datei anhängen~]# mysql < binlog.sql #Binärprotokoll verwenden, um ab dem Zeitpunkt unserer letzten vollständigen Sicherung inkrementell wiederherzustellen~]# mysql -e 'SELECT COUNT(*) FROM school.testtb' #Überprüfen Sie es, 200.000 Datensätze sind alle da, nett +----------+ | ANZAHL(*) | +----------+ | 199998 | +----------+ Gehen Sie zu /etc/my.cnf und löschen Sie skip_networking unter [mysqld], starten Sie den Dienst neu und die Wiederherstellung ist abgeschlossen. 3. mysqldump + InnoDB + binlog = vollständiges logisches Hot-Standby + inkrementelles Backup1) Backup: Ich werde hier keine Daten generieren, sondern nur der oben genannten Umgebung folgen ~]# mysqldump -A -F -E -R --single-transaction --master-data=2 --flush-privileges > /backup/full-`date +%F-%T`.sql #Vollständige Datenbanksicherung 2) Fehler simulieren: MariaDB [(keine)]> CREATE DATABASE db1; #Eine Datenbank erstellen MariaDB [(keine)]> CREATE DATABASE db2; #Eine weitere Datenbank erstellen MariaDB [Schule]> use school; MariaDB [Schule]> DROP TABLE testtb; #Aufgrund eines Fehlers wurde unsere Tabelle mit 200.000 Datensätzen gelöschtMariaDB [Schule]> CREATE TABLE students (id INT(4) AUTO_INCREMENT PRIMARY KEY,name CHAR(30),age TINYINT); #Anschließend haben andere Benutzer andere Tabellen erstelltMariaDB [Schule]> INSERT INTO students(name,age) VALUES ('user1',20); #Und auch Daten hinzugefügt 3) Wiederherstellen: An diesem Punkt haben wir festgestellt, dass eine Tabelle fehlt und dringend wiederhergestellt werden muss. Fangen wir an. MariaDB [(keine)]> FLUSH TABLES WITH READ LOCK; #Tabelle sperren MariaDB [(keine)]> FLUSH LOGS; #Binäre Protokolldatei leeren und rollen MariaDB [(keine)]> SHOW MASTER LOGS; #Den aktuellen Protokollstatus anzeigen +--------------------+-----------+ | Protokollname | Dateigröße | +--------------------+-----------+ | mariadb-bin.000001 | 30334 | | mariadb-bin.000002 | 1038814 | | mariadb-bin.000003 | 29178309 | | mariadb-bin.000004 | 528 | | mariadb-bin.000005 | 29177760 | | mariadb-bin.000006 | 29177786 | | mariadb-bin.000007 | 953 | | mariadb-bin.000008 | 245 | +--------------------+-----------+ ~]# systemctl stop mariadb #Dienst stoppen und Reparatur vorbereiten~]# head -30 /backup/full-2018-06-14-05\:33\:47.sql |grep "CHANGE MASTER" -- ÄNDERN SIE MASTER IN MASTER_LOG_FILE='mariadb-bin.000007', MASTER_LOG_POS=245; #Suchen Sie den Protokollpunkt der vollständigen Sicherung bei 245 von mariadb-bin.000007 ~]# ls -1 /Daten/binlog/ mariadb-bin.000001 mariadb-bin.000002 mariadb-bin.000003 mariadb-bin.000004 mariadb-bin.000005 mariadb-bin.000006 mariadb-bin.000007 mariadb-bin.000008 mariadb-bin.index ~]# mysqlbinlog --start-position=245 /data/binlog/mariadb-bin.000007 > /backup/binlog.sql #Exportieren Sie das Binärprotokoll nach der vollständigen Sicherung~]# mysqlbinlog /data/binlog/mariadb-bin.000008 >> /backup/binlog.sql ~]# vim /backup/binlog.sql #Ändern Sie die exportierte SQL-Datei und löschen Sie die falsche SQL-Anweisung. Löschen Sie die Zeile „DROP TABLE `testtb` /* generated by server */“ Importieren Sie die Sicherung: ~]# rm -rf /data/mysqldb/* #Löschen Sie zuerst die fehlerhafte Datenbank~]# vim /etc/my.cnf #Bearbeiten Sie die Konfigurationsdatei. Fügen Sie skip_networking zu [mysqld] hinzu, um zu verhindern, dass Benutzer Daten schreiben~]# systemctl start mariadb #Starten Sie den Dienst~]# mysql < /backup/full-2018-06-14-05\:33\:47.sql #Vollständiges Backup importieren~]# mysql < /backup/binlog.sql #Inkrementelles Backup importierenMariaDB [(none)]> show databases; #Überprüfen Sie, ob unsere Daten erfolgreich wiederhergestellt wurden+--------------------+ | Datenbank | +--------------------+ | Informationsschema | | db1 | #Wiederhergestellt | db2 | #Wiederhergestellt | mysql | | Leistungsschema | | Schule | | Prüfung | +--------------------+ MariaDB [(keine)]> SELECT COUNT(*) FROM school.testtb; +----------+ | ANZAHL(*) | +----------+ | 199999 | #Wiederhergestellt+----------+ MariaDB [(keine)]> SELECT * FROM Schule.Studenten; +----+-------+------+ | ID | Name | Alter | +----+-------+------+ | 1 | Benutzer1 | 20 | #Wiederhergestellt+----+-------+------+ Bisher ist die Wiederherstellung abgeschlossen. Löschen Sie skip_networking in der Konfigurationsdatei, starten Sie den Dienst neu und Sie sind fertig~ 4. Xtrabackup + InnoDB == Vollständiges Hot-Backup + inkrementelles Backup1) Vollständige Sicherung ~]# innobackupex --user=root /backup/ #Das Passwort wird hier weggelassen 2) Daten hinzufügen und löschen MariaDB [Schule]> CALL pro_testtb; #Fügen Sie einige Daten hinzuMariaDB [Schule]> SELECT COUNT(*) FROM testtb; #Jetzt gibt es 300.000 Datensätze+----------+ | ANZAHL(*) | +----------+ | 299998 | +----------+ MariaDB [Schule]> INSERT INTO students VALUES (2,'user2',21); MariaDB [Schule]> UPDATE Schüler SET Alter=19 WHERE id=1; MariaDB [Schule]> SELECT * FROM Schüler; +----+-------+------+ | ID | Name | Alter | +----+-------+------+ | 1 | Benutzer1 | 19 | | 2 | Benutzer2 | 21 | +----+-------+------+ 3) Inkrementelles Backup ~]# mkdir /backup/inc{1,2} #Erstellen Sie ein inkrementelles Backup-Verzeichnis~]# innobackupex --incremental /backup/inc1/ --incremental-basedir=/backup/2018-06-14_10-44-57/ #Geben Sie das inkrementelle Backup basierend auf dem Voll-Backup an 4) Daten hinzufügen und löschen MariaDB [(keine)]> DATENBANK ERSTELLEN db3; MariaDB [(keine)]> DROP TABLE school.students; #Die Tabelle wurde versehentlich gelöscht MariaDB [(keine)]> use school MariaDB [Schule]> CALL pro_testtb; #Anschließend werden weitere Daten generiertMariaDB [Schule]> SELECT COUNT(*) FROM testtb; +----------+ | ANZAHL(*) | +----------+ | 399997 | +----------+ MariaDB [Schule]> SELECT * FROM students; #An diesem Punkt habe ich festgestellt, dass die Tabelle „Studenten“ fehlt. Was soll ich tun? FEHLER 1146 (42S02): Tabelle „school.students“ existiert nicht 5) Fehler tritt auf ~]# rm -rf /data/mysqldb/* #Löschen Sie das Datenverzeichnis, bevor Sie MariaDB wiederherstellen [(keine)]> show databases; #Die Datenbank ist jetzt weg+--------------------+ | Datenbank | +--------------------+ | Informationsschema | +--------------------+ 6) Notfallwiederherstellung So stellen Sie vollständige und inkrementelle Backups wieder her: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers ::::::::::: Stellen Sie anhand des Binärprotokolls das letzte inkrementelle Backup wie folgt wieder her: ~]# cat /backup/2018-06-14_10-44-57/xtrabackup_binlog_info #Überprüfen Sie den Datensatzpunkt des Binärprotokolls während der Sicherung mariadb-bin.000011 35740416 ~]# ls -1 /data/binlog/ #Sehen Sie, wo unsere Binärprotokolldatei aufgezeichnet ist mariadb-bin.000001 mariadb-bin.000002 mariadb-bin.000003 mariadb-bin.000004 mariadb-bin.000005 mariadb-bin.000006 mariadb-bin.000007 mariadb-bin.000008 mariadb-bin.000009 mariadb-bin.000010 mariadb-bin.000011 mariadb-bin.000012 mariadb-bin.000013 mariadb-bin.index ~]# mysqlbinlog --start-position=35740416 /data/binlog/mariadb-bin.000011 > /backup/binlog.sql #Exportieren Sie die Binärprotokolldaten nach dem letzten inkrementellen Backup~]# mysqlbinlog /data/binlog/mariadb-bin.000012 >> /backup/binlog.sql ~]# mysqlbinlog /data/binlog/mariadb-bin.000013 >> /backup/binlog.sql Bearbeite die Datei /backup/binlog.sql und lösche „DROP TABLE `school`.`students` /* generated by server */“, um das versehentliche Löschen rückgängig zu machen. MariaDB [(none)]> SET sql_log_bin=0; #Schalte die Binärprotokollfunktion vorübergehend aus. MariaDB [(none)]> source /backup/binlog.sql #Importiere nach dem inkrementellen Backup die neuesten Daten, um zu prüfen, ob die Daten vollständig wiederhergestellt wurden. Lösche skip_networking in my.cnf und starte den Dienst neu. Jetzt wurden die Daten auf den neuesten Stand zurückgesetzt. 5. Verwenden Sie Xtrabackup, um eine Einzeltabellensicherung zu implementieren1) Sichern Sie eine einzelne Tabelle ~]# innobackupex --include="testdb.testlog" /backup #Tabellendaten sichern~]# mysql -e 'SHOW CREATE TABLE testdb.testlog' > /backup/desc_testdb_testlog.sql #Tabellenbereich sichern~]# mysql -e 'DROP TABLE testdb.testlog' #Fehler simulieren und Testlog-Tabelle löschen 2) Wiederherstellen einer einzelnen Tabelle ~]# innobackupex --apply-log --export /backup/2018-06-14_17-47-02/ #Tabellendaten anordnen~]# vim /backup/desc_testdb_testlog.sql #Bearbeiten Sie die Anweisung zum Erstellen des Tablespace und löschen Sie die folgenden Felder Table Create Table Testprotokoll ~]# mysql testdb < /backup/desc_testdb_testlog.sql #Tablespace importieren~]# mysql testdb -e 'DESC testlog' #Prüfen, ob der Import erfolgreich war+-------+----------+------+-----+---------+----------------+ | Feld | Typ | Null | Schlüssel | Standard | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NEIN | PRI | NULL | auto_increment | | Name | char(30) | JA | | NULL | | | Alter | int(11) | JA | | 20 | | +-------+----------+------+-----+---------+----------------+ ~]# mysql -e 'ALTER TABLE testdb.testlog DISCARD TABLESPACE' # Tabellenbereich löschen~]# cd /backup/2018-06-14_17-47-02/testdb/ testdb]# cp testlog.cfg testlog.exp testlog.ibd /var/lib/mysql/testdb/ #Kopieren Sie die Tabellendaten in das Bibliotheksverzeichnis~]# chown -R mysql:mysql /var/lib/mysql/testdb/ #Ändern Sie den Besitzer und die Gruppe~]# mysql -e 'ALTER TABLE testdb.testlog IMPORT TABLESPACE' #Importieren Sie den Tablespace ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung des Kapselungsbeispiels für Netzwerkanforderungen
>>: Die Webseite kann nicht geöffnet werden, da dem Div-Element ein schließender Tag fehlt
Überblick UNION Mit dem Schlüsselwort „Verbindung...
Die Layui-Tabelle enthält mehrere Datenzeilen. Üb...
Installieren Sie Virtualisierungssoftware Bevor S...
1. Lassen Sie uns zunächst eine allgemeine Einfüh...
Inhaltsverzeichnis 1 Einleitung 2 Grundlegende Be...
Die MySQL-Installation ist relativ einfach. Norma...
Dieser Artikel veranschaulicht anhand von Beispie...
Inhaltsverzeichnis Stil mit Gültigkeitsbereich St...
Übergeben Sie einfach benutzerdefinierte Paramete...
Inhaltsverzeichnis 1. Übersicht 1.1 Verwendung vo...
Umgebungsbeschreibung Serversystem: Ubuntu 18.04 ...
Das Umschreibmodul ist das Modul ngx_http_rewrite...
Schließung Dienst Nginx stoppen systemctl stoppt ...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Vorwort -Link Benutzerdefinier...