509 Stimmen

MySQLDump ohne Sperren von Tabellen ausführen

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.

731voto

John Millikin Punkte 190278

Ist die --lock-tables=false Option funktionieren?

Nach Angaben der Manpage Wenn Sie InnoDB-Tabellen dumpen, können Sie die --single-transaction Option:

--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.

Pour innodb DB :

mysqldump --single-transaction=TRUE -u username -p DB

308voto

Warren Krewenki Punkte 3473

Das ist zwar viel zu spät, aber gut für alle, die das Thema suchen. Wenn Sie nicht innoDB sind, und Sie sind nicht besorgt über Sperren, während Sie dump einfach die Option verwenden:

--lock-tables=false

47voto

dvorak Punkte 29751

Die Antwort hängt davon ab, welches Speichermedium Sie verwenden. Das ideale Szenario ist, wenn Sie InnoDB verwenden. In diesem Fall können Sie die --single-transaction Flag, wodurch Sie einen kohärenten Schnappschuss der Datenbank zu dem Zeitpunkt erhalten, an dem der Dump beginnt.

43voto

Azamat Tokhtaev Punkte 747

--skip-add-locks für mich hilfreich

18voto

dgitman Punkte 181

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X