wake-up-neo.com

Führen Sie MySQLDump aus, ohne Tabellen zu sperren

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 verwende derzeit:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

Aber es sperrt jeden Tisch, während er läuft.

400
Greg

Funktioniert die --lock-tables=false-Option?

Wenn Sie InnoDB-Tabellen sichern, können Sie gemäß der man-Seite die Option --single-transaction verwenden:

--lock-tables, -l

Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.

Für innodb DB:

mysqldump --single-transaction=TRUE -u username -p DB
568
John Millikin

Dies ist zu spät, aber gut für alle, die das Thema durchsuchen. Wenn Sie nicht innoDB sind und sich nicht um das Sperren während des Abzugs kümmern, verwenden Sie einfach die Option:

--lock-tables=false
278
Warren Krewenki

Die Antwort hängt von der verwendeten Speicher-Engine ab. Das ideale Szenario ist, wenn Sie InnoDB verwenden. In diesem Fall können Sie das Flag --single-transaction verwenden, mit dem Sie zu Beginn des Speicherauszugs eine zusammenhängende Momentaufnahme der Datenbank erhalten.

45
dvorak

--skip-add-locks hat für mich geholfen

31
Azamat Tokhtaev

Um große Tabellen zu sichern, sollten Sie die Option --single-transaction mit --quick kombinieren.

http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html#option_mysqldump_single-transaction

13
dgitman

Um ehrlich zu sein, 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 einigen Tabellen geändert, die nur kurz vor dem Speicherauszug stehen.

Sperren Sie also entweder die Tabellen oder verwenden Sie die Replikation.

9
michal kralik

Für InnoDB-Tabellen verwenden Sie --single-transaction

msgstr "Es speichert den konsistenten Zustand der Datenbank zu dem Zeitpunkt, zu dem BEGIN ausgegeben wurde, ohne Anwendungen zu blockieren" MySQL DOCS

http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html#option_mysqldump_single-transaction

8
Lex

Dies ist ungefähr so ​​spät im Vergleich zu dem Typ, der sagte, er sei zu spät gekommen, als er zur ursprünglichen Antwort kam, aber in meinem Fall (MySQL über WAMP unter Windows 7) musste ich Folgendes verwenden:

--skip-lock-tables
6
dtbarne
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
5
naveen_sfx

Wegen https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :

Einige Optionen wie --opt (standardmäßig aktiviert) aktivieren --locktabellen automatisch. Wenn Sie dies überschreiben möchten, verwenden Sie --skip-lock-tables am Ende der Optionsliste.

1
Dmytro Gierman

Wenn Sie MySQL Workbench verwenden, klicken Sie unter Datenexport auf Erweiterte Optionen und deaktivieren Sie die Optionen für "Sperrtabellen".

 enter image description here

0
Samuel Diogo

Heute Selbst ich war mit demselben Problem konfrontiert, hatte jedoch keinen Zugriff auf die Befehlszeile. So öffnete ich die SQL-Datei im Editor und entfernte die Zeile unterhalb der Tabellen 

LOCK TABLES `yourtable name` WRITE;

dann importierte ich in meine Entwicklungsumgebung .Works fine . hoffe es hilft jemandem

0
iCoders

Noch eine späte Antwort:

Wenn Sie versuchen, eine heiße Kopie der Serverdatenbank (in einer Linux-Umgebung) zu erstellen und das Datenbankmodul aller Tabellen MyISAM ist, verwenden Sie solltemysqlhotcopy.

Entsprechend der Dokumentation:

Es verwendet FLUSH TABLES, LOCK TABLES und cp oder scp, um eine Datenbank zu erstellen Backup. Dies ist eine schnelle Methode zum Erstellen einer Sicherung der Datenbank oder einzelner Tabellen, aber es kann nur auf demselben Computer ausgeführt werden, auf dem die Datenbank Verzeichnisse befinden sich. mysqlhotcopy funktioniert nur zum Sichern von MyISAM- und ARCHIVE-Tabellen.

Die LOCK TABLES-Zeit hängt von der Zeit ab, zu der der Server MySQL-Dateien kopieren kann (er erstellt keinen Speicherauszug).

0
Andrés Morales