mysql hat versehentlich Daten gelöscht
Für versehentlich gelöschte Zeilen
Für versehentlich gelöschte Datenbanken/Tabellen Sie müssen eine vollständige Sicherung und inkrementelle Protokolle verwenden. Ist es erforderlich, regelmäßig vollständige Online-Sicherungen durchzuführen und das Binlog in Echtzeit zu sichern? Wenn jemand versehentlich um 12 Uhr mittags eine Datenbank löscht, läuft die Wiederherstellung der Daten wie folgt ab: Führen Sie die letzte vollständige Sicherung durch. Gehen Sie davon aus, dass die Datenbank einmal täglich gesichert wird und die letzte Sicherung am selben Tag um 0:00 Uhr erfolgte. Stellen Sie eine temporäre Bibliothek aus der Sicherung wieder her. Aus der Log-Sicherung die Logs nach 0:00 Uhr entnehmen Wenden Sie alle diese Protokolle, mit Ausnahme von Anweisungen, die versehentlich Daten löschen, auf die temporäre Datenbank an. Beachten: Um die Datenwiederherstellung zu beschleunigen, können Sie, wenn sich in dieser temporären Bibliothek mehrere Datenbanken befinden, bei Verwendung des Befehls mysqlbinlog einen Parameter –database hinzufügen, um die Bibliothek anzugeben, in der sich die versehentlich gelöschte Tabelle befindet. Dadurch wird die Notwendigkeit vermieden, beim Wiederherstellen von Daten andere Bibliotheksprotokolle anzuwenden. Beim Anwenden von Protokollen müssen Sie das Binärprotokoll der Anweisung mit der fehlerhaften Operation um 12 Uhr überspringen: Methode zur Beschleunigung der Wiederherstellung: Legen Sie nach dem Sichern und Wiederherstellen einer temporären Instanz diese temporäre Instanz als Slave-Datenbank der Online-Sicherungsdatenbank fest. Es ist für ein System unmöglich, eine unbegrenzte Anzahl von Protokollen zu sichern. Sie müssen außerdem die Anzahl der Tage festlegen, für die Protokolle basierend auf Kosten und Speicherplatzressourcen aufbewahrt werden sollen. Wenn Ihr DBA-Team Ihnen mitteilt, dass es garantieren kann, dass eine Instanz innerhalb eines halben Monats zu einem beliebigen Zeitpunkt wiederhergestellt werden kann, bedeutet dies, dass das Sicherungssystem die Protokolle mindestens einen halben Monat lang aufbewahrt. Auch wenn „niemand möchte, dass so etwas passiert“, können Sie im Falle einer versehentlichen Löschung die Daten schnell wiederherstellen und die Verluste minimieren, sodass Sie nicht weglaufen müssen. Wenn Sie jedoch in Eile manuelle Vorgänge durchführen und dabei Fehler machen, die Ihrem Unternehmen schaden, wäre das nicht akzeptabel. Verzögerte Replikation der Standby-Datenbank
So löschen Sie Daten mit rm Sofern nicht der gesamte Cluster böswillig gelöscht wird und nur die Daten eines der Knoten gelöscht werden, nimmt das HA-System seine Arbeit auf und wählt eine neue Masterdatenbank aus, um den normalen Betrieb des gesamten Clusters sicherzustellen. An diesem Punkt müssen Sie nur noch die Daten auf diesem Knoten wiederherstellen und ihn dann mit dem gesamten Cluster verbinden. Natürlich verfügen mittlerweile nicht nur DBAs über automatisierte Systeme, sondern auch SAs (Systemadministratoren), sodass möglicherweise eine Operation, bei der Maschinen stapelweise offline genommen werden, alle Knoten in Ihrem gesamten MySQL-Cluster löscht. Um mit dieser Situation umzugehen, kann ich Ihnen nur raten, Ihre Backups über verschiedene Rechenzentren oder vorzugsweise über verschiedene Städte hinweg zu speichern. Kill-SQL-Anweisung Beendet Sitzung B den Thread direkt und wird beendet, ohne etwas zu tun? Das wird offensichtlich nicht funktionieren. Beim Hinzufügen, Löschen, Ändern oder Abfragen einer Tabelle wird der Tabelle eine MDL-Lesesperre hinzugefügt. Obwohl Sitzung B blockiert ist, verfügt sie daher noch immer über eine MDL-Lesesperre. Wenn der Thread beendet wird, wird er direkt beendet und die MDL-Lesesperre kann nicht mehr freigegeben werden. Kill bedeutet nicht, sofort zu stoppen, sondern dem Ausführungsthread mitzuteilen, dass diese Anweisung nicht mehr ausgeführt werden muss und er die „Ausführungsstopplogik“ starten kann. Tatsächlich führt der Thread, der den Kill-Befehl in MySQL verarbeitet, beim Ausführen der Kill-Abfrage thread_id_b Folgendes aus:
Denn in unserem Beispiel in Abbildung 1 befindet sich Sitzung B im Sperrwartezustand. Wenn wir den Thread-Status von Sitzung B einfach auf Das Obige hat drei Bedeutungen:
Ein Beispiel für einen Kill Führen Sie „set global innodb_thread_concurrency=2“ aus, um die Obergrenze gleichzeitiger InnoDB-Threads auf 2 festzulegen; führen Sie dann die folgende Sequenz aus: Sie können sehen: Sitzung C wurde während der Ausführung blockiert; Der von Sitzung D ausgeführte Befehl „kill Query C“ hat jedoch keine Wirkung. Erst wenn Sitzung E den Befehl „Kill Connection“ ausführt, wird die Verbindung zu Sitzung C getrennt und die Meldung „Verbindung zum MySQL-Server während der Abfrage verloren“ angezeigt. Wenn Sie jetzt jedoch „show processlist“ in Sitzung E ausführen, wird das folgende Bild angezeigt: Die Spalte „Commnad“ des Threads mit der ID=12 zeigt „Killed“ an. Mit anderen Worten: Obwohl die Verbindung zum Client getrennt ist, wird die Anweisung weiterhin auf dem Server ausgeführt. In diesem Beispiel sieht die Wartelogik von Thread 12 folgendermaßen aus: Alle 10 Millisekunden wird geprüft, ob er in die InnoDB-Ausführung eintreten kann. Das heißt, obwohl der Status von Thread 12 auf KILL_QUERY gesetzt wurde, wird der Status des Threads während der Schleife, in der auf den Eintritt in InnoDB gewartet wird, nicht beurteilt, sodass die Phase der Beendigungslogik überhaupt nicht betreten wird. Wenn Sitzung E den Befehl „Kill Connection“ ausführt, geschieht Folgendes:
Warum wird die Spalte „Befehl“ beim Ausführen von „show processlist“ als „beendet“ angezeigt? Tatsächlich liegt dies daran, dass bei der Ausführung von show processlist eine spezielle Logik gilt: Wenn der Status eines Threads KILL_CONNECTION ist, wird in der Spalte „Befehl“ „Killed“ angezeigt. Auch wenn der Client beendet wird, ist der Status dieses Threads also immer noch „Warten“. Nur wenn die Bedingungen zum Aufrufen von InnoDB erfüllt sind und die Abfrageanweisung der Sitzung C weiterhin ausgeführt wird, kann festgestellt werden, dass der Thread-Status KILL_QUERY oder KILL_CONNECTION geworden ist, und dann kann in die Phase der Beendigungslogik eingetreten werden. Der erste Typ von Situation, in der „Kill“ ungültig ist, liegt vor, wenn der Thread die Logik zur Bestimmung des Thread-Status nicht ausführt. Es ist auch möglich, dass die Lese- und Schreib-E/A-Funktionen aufgrund übermäßigen E/A-Drucks nicht zurückkehren können, was dazu führt, dass der Thread-Status nicht rechtzeitig bestimmt werden kann.
Strg+C, MySQL startet tatsächlich einen Verbindungsprozess und sendet den Befehl „Kill Query“. Missverständnisse über langsame Clientverbindungen Wenn die Datenbank viele Tabellen enthält, ist die Verbindung langsam. Wenn beispielsweise eine Bibliothek mit Zehntausenden von Tabellen vorhanden ist, stellt MySQL bei der Verbindung mit Standardparametern eine Funktion zur Vervollständigung des lokalen Bibliotheksnamens und des Tabellennamens bereit:
Der dritte Schritt ist ein zeitaufwändiger Vorgang, was bedeutet, dass die von uns wahrgenommene Langsamkeit nicht auf eine vollständige Verbindung oder einen langsamen Server, sondern auf einen langsamen Client zurückzuführen ist. Wenn Sie diesem Link -A hinzufügen, können Sie die Autovervollständigungsfunktion abbrechen und schnell zurückkehren. Die automatische Vervollständigung bewirkt, dass bei der Eingabe eines Bibliotheks- oder Tabellennamens das Präfix eingegeben wird und Sie mit der Tabulatortaste automatisch vervollständigen oder eine Eingabeaufforderung anzeigen können. Wenn Sie die automatische Vervollständigung nicht sehr oft verwenden, können Sie bei jeder Verwendung -A hinzufügen. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Verwendung des Linux-Dateibefehls
>>: Linux-Installation Redis-Implementierungsprozess und Fehlerlösung
Die wichtigsten Protokolle im MySQL-Protokollsyst...
Inhaltsverzeichnis Vorwort: 1. Docker installiere...
1. Grammatik: <meta name="Name" conte...
Zusammenfassung: Ob bei der Arbeit oder im Vorste...
1. Was ist mycat Ein vollständig Open Source-Groß...
Es gibt drei Hauptmethoden der MySQL-Replikation:...
Inhaltsverzeichnis 1. Beschreibung 2. Laden Sie d...
Unicode-Signatur-BOM – Was ist die BOM? BOM ist di...
Einfaches Beispiel für einen MySQL-Trigger Gramma...
Frage 1: Wie weisen Sie den Browser an, die gewüns...
1. Manuelles Erstellen und Hinzufügen der Datei m...
In diesem Artikel wird die Installations- und Kon...
Inhaltsverzeichnis 1. Klasse 1.1 Konstruktor() 1....
Bei der Installation von Puppeteer unter Linux kö...
Wenn der Schlüssel nicht zum v-for-Tag hinzugefüg...