Heim  >  Artikel  >  Datenbank  >  Was soll ich tun, wenn mysqldump --single-transaction auf eine Alter-Tabelle stößt?

Was soll ich tun, wenn mysqldump --single-transaction auf eine Alter-Tabelle stößt?

零下一度
零下一度Original
2017-07-27 16:46:511564Durchsuche

Testumgebung:

MySQL 5.5.14

Unter der Datenbank testdb01 befindet sich die Tabelle tb1001, und die aktuelle Tabelle enthält zwei Daten:

##==================================== ====== ================##

Ich habe festgestellt, dass ein leerer Satz ohne Fehler zurückgegeben wurde .

Dies erklärt auch einigermaßen das Phänomen der Operation meines Kollegen: Während des Mysqldump-Prozesses wurde die Tabellenstruktur geändert, der Änderungsvorgang wurde nicht blockiert und der Mysqldump-Vorgang wurde „normal abgeschlossen“.

Da die Operation SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001` weder einen Fehler noch Daten zurückgibt, behandelt der mysqldump-Prozess tb1001 als leere Tabelle und exportiert dann die nachfolgenden Tabellen weiter, bis alle werden exportiert. Die Tabelle gibt dann den Status einer erfolgreichen Ausführung zurück. Allerdings fehlen im exportierten Backup bereits die Daten von tb1001. Wenn Sie dieses Backup zufällig zum Wiederherstellen von Daten verwenden, kommt es unweigerlich zu einem „Datenverlust“.

Lösung:

Bevor Sie die Tabelle in der MySQL 5.5-Version ändern, prüfen Sie zunächst, ob der aktuelle Server eine mysqldump-Operation ausführt, um eine parallele Ausführung beider zu vermeiden.

Wenn Sie eine von mysqldump exportierte Tabelle ändern, wird der Änderungsvorgang blockiert, bis mysqldump endet. Diese Situation entspricht der MySQL-Version 5.6.

Zusammenfassung:

Für MySQL Version 5.5 wird mysqldump gleichzeitig mit der Tabellenänderungsoperation ausgeführt:

Wenn die Tabellenänderungsoperation nach „mysqldump ist aktiviert, aber die Änderung wurde nicht exportiert. „Beginn innerhalb des Zeitraums“, bevor die Tabellendaten vorliegen. Der Tabellenänderungsvorgang wurde erfolgreich abgeschlossen und die Ausführung von mysqldump schlägt nicht fehl, die Daten der Änderungstabelle können jedoch nicht normal exportiert werden.

Wenn sich der Tabellenänderungsvorgang im Zeitraum „mysqldum hat die Änderungstabellendaten exportiert, aber den mysqldump-Vorgang noch nicht abgeschlossen“ befindet, ist der Tabellenänderungsvorgang blockiert, mysqldum kann erfolgreich abgeschlossen werden und der Tabellenänderungsvorgang kann normal ausgeführt werden, nachdem der mysqldump-Vorgang abgeschlossen ist.

Für MySQL Version 5.5 sollten Sie es vermeiden, mysqldump- und Änderungstabellenoperationen gleichzeitig auszuführen, um zu vermeiden, dass die Daten der geänderten Tabelle in der Sicherung verloren gehen und Dateninkonsistenzen verursacht werden!

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn mysqldump --single-transaction auf eine Alter-Tabelle stößt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn