Uruchom MySQLDump bez blokowania tabel

Chcę skopiować bazę danych produkcji na żywo do mojej lokalnej bazy danych rozwoju. Czy istnieje sposób, aby to zrobić bez blokowania bazy danych produkcji?

Obecnie używam:

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

Ale blokuje każdą tabelę podczas biegu.

Author: TRiG, 2008-09-19

14 answers

Czy opcja --lock-tables=false działa?

Zgodnie ze stroną podręcznika , jeśli wyrzucasz tabele InnoDB, możesz użyć opcji --single-transaction:

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

Dla innodb DB :

mysqldump --single-transaction=TRUE -u username -p DB
 656
Author: John Millikin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-08 04:12:56

Jest już za późno, ale dobrze dla każdego, kto szuka tematu. Jeśli nie jesteś innoDB i nie martwisz się o blokowanie podczas zrzutu, po prostu użyj opcji:

--lock-tables=false
 296
Author: Warren Krewenki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 22:20:37

ODPOWIEDŹ różni się w zależności od tego, jakiego silnika pamięci używasz. Idealny scenariusz jest taki, jeśli używasz InnoDB. W takim przypadku możesz użyć znacznika --single-transaction, który da ci spójną migawkę bazy danych w momencie rozpoczęcia zrzutu.

 44
Author: dvorak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 15:36:45

--skip-add-locks helped for me

 38
Author: Azamat Tokhtaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 15:36:36

Aby zrzucić Duże tabele, należy połączyć opcję -- single-transaction z --quick.

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

 17
Author: dgitman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 19:10:43

Dla tabel InnoDB użyj znacznika --single-transaction

Zrzuca spójny stan bazy danych w momencie rozpoczęcia został wydany bez blokowania żadnych aplikacji

MySQL DOCS

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

 12
Author: Lex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-26 02:28:29

Szczerze mówiąc, skonfigurowałbym do tego replikację, jakby nie blokować tabel, to z Zrzutu wydobędziesz niespójne dane.

Jeśli zrzut trwa dłużej, tabele, które zostały już wyrzucone, mogły ulec zmianie wraz z tabelą, która dopiero ma zostać wyrzucona.

Więc albo Zablokuj tabele, albo użyj replikacji.

 10
Author: mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 19:44:58

To jest mniej więcej tak późno w porównaniu do faceta, który powiedział, że się spóźnił, jak był na oryginalną odpowiedź, ale w moim przypadku (MySQL via WAMP na Windows 7), musiałem użyć:

--skip-lock-tables
 10
Author: dtbarne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-18 14:58:17
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
 6
Author: naveen_sfx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-01 09:07:22

Podczas korzystania z MySQL Workbench, przy eksporcie danych, kliknij w Opcje zaawansowane i odznacz opcje "lock-tables".

Tutaj wpisz opis obrazka

 3
Author: Samuel Diogo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-28 18:08:02

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

Niektóre opcje, takie jak --opt (które jest domyślnie włączone), automatycznie włączają --lock-tables. Jeśli chcesz to zastąpić, użyj --skip-lock-tables na końcu listy opcji.

 1
Author: Dmytro Gierman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-17 14:19:00

Ponieważ żadne z tych podejść nie działało dla mnie, po prostu zrobiłem:

mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]

Spowoduje wyłączenie obu komend LOCK TABLE <x> i UNLOCK TABLES.

Uwaga: mam nadzieję, że Twoje dane nie zawierają tego ciągu!

 0
Author: augustomen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 16:48:40

Kolejna późna odpowiedź:

Jeśli próbujesz zrobić gorącą kopię bazy danych serwera (w środowisku linux), a silnikiem bazy danych wszystkich tabel jest MyISAM, powinieneś użyć mysqlhotcopy.

Zgodnie z dokumentacją:

Używa FLUSH TABLES, LOCK TABLES i CP lub scp do tworzenia bazy danych wsparcie. Jest to szybki sposób na wykonanie kopii zapasowej bazy danych lub pojedyncze tabel, ale można go uruchomić tylko na tej samej maszynie, na której baza danych katalogi znajdują się. mysqlhotcopy działa tylko do tworzenia kopii zapasowych Tabele MyISAM i ARCHIVE.

Czas LOCK TABLES zależy od czasu, w którym serwer może skopiować pliki MySQL (nie robi zrzutu).

 0
Author: Andrés Morales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-12 12:43:26

W przypadku stosowania klastra Percona XtraDB - Znalazłem, że dodawanie -- skip-add-locks
do polecenia mysqldump Pozwala klastrowi Percona XtraDB na uruchomienie pliku zrzutu bez problemu o polecenia LOCK TABLES w pliku zrzutu.

 0
Author: user14570900,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-14 10:35:03