Ich möchte eine Live-Produktionsdatenbank in meine lokale Entwicklungsdatenbank kopieren. Gibt es eine Möglichkeit, dies zu tun, ohne die Produktionsdatenbank zu sperren?
Ich benutze derzeit:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Aber es sperrt jede Tabelle, während sie läuft.
Antworten:
Funktioniert die
--lock-tables=false
Option?Laut Manpage können Sie beim Dumping von InnoDB-Tabellen die folgende
--single-transaction
Option verwenden:Für innodb DB :
quelle
Dies ist Alter zu spät, aber gut für alle, die das Thema suchen. Wenn Sie nicht innoDB sind und sich keine Sorgen über das Sperren während des Dumps machen, verwenden Sie einfach die folgende Option:
quelle
--single-transaction
.FLUSH TABLES WITH READ LOCK
.Die Antwort hängt davon ab, welche Speicher-Engine Sie verwenden. Das ideale Szenario ist, wenn Sie InnoDB verwenden. In diesem Fall können Sie das
--single-transaction
Flag verwenden, mit dem Sie einen kohärenten Snapshot der Datenbank zum Zeitpunkt des Beginns des Speicherauszugs erhalten.quelle
--skip-add-locks
hat mir geholfenquelle
--skip-add-locks
würde nur die Dump-Wiederherstellung schneller machen. Dies ist keine richtige Antwort.Um große Tabellen zu sichern, sollten Sie die Option --single-transaction mit --quick kombinieren.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
quelle
Verwenden Sie für InnoDB-Tabellen das Flag
--single-transaction
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
quelle
--skip-lock-tables
.Ehrlich gesagt würde ich die Replikation dafür einrichten. Wenn Sie keine Tabellen sperren, erhalten Sie inkonsistente Daten aus dem Speicherauszug.
Wenn der Speicherauszug länger dauert, haben sich möglicherweise bereits gespeicherte Tabellen zusammen mit einer Tabelle geändert, die gerade ausgegeben werden soll.
Sperren Sie also entweder die Tabellen oder verwenden Sie die Replikation.
quelle
Dies ist ungefähr so spät im Vergleich zu dem Typ, der sagte, er sei zu spät wie bei der ursprünglichen Antwort, aber in meinem Fall (MySQL über WAMP unter Windows 7) musste ich Folgendes verwenden:
quelle
quelle
Wenn Sie MySQL Workbench verwenden, klicken Sie beim Datenexport auf Erweiterte Optionen und deaktivieren Sie die Optionen für "Sperrtabellen".
quelle
Da keiner dieser Ansätze für mich funktioniert hat, habe ich einfach Folgendes gemacht:
Es werden sowohl Befehle
LOCK TABLE <x>
als auchUNLOCK TABLES
Befehle ausgeschlossen.Hinweis: Hoffentlich enthalten Ihre Daten diese Zeichenfolge nicht!
quelle
Aufgrund von https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
quelle
Noch eine späte Antwort:
Wenn Sie versuchen, eine Hot-Kopie der Serverdatenbank (in einer Linux-Umgebung) zu erstellen und das Datenbankmodul aller Tabellen MyISAM ist, sollten Sie verwenden
mysqlhotcopy
.Entsprechend Dokumentation:
Die
LOCK TABLES
Zeit hängt von der Zeit ab, zu der der Server MySQL-Dateien kopieren kann (es wird kein Speicherauszug erstellt).quelle
Heute hatte ich sogar das gleiche Problem, aber ich hatte keinen Zugriff auf die Befehlszeile. Also öffnete ich die SQL-Datei im Editor und entfernte sie unter der Zeile aus den Tabellen
dann habe ich in meine Entwicklungsumgebung importiert. hoffe es hilft jemandem
quelle