Chcę skopiować produkcyjną bazę danych na żywo do mojej lokalnej bazy danych programowania. Czy można to zrobić bez blokowania produkcyjnej bazy danych?
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 działania.
Odpowiedzi:
Czy
--lock-tables=false
opcja działa?Według strony man , jeśli dumping tabel InnoDB można użyć
--single-transaction
opcji:Dla innodb DB :
źródło
To jest za późno, ale dobre dla każdego, kto szuka tematu. Jeśli nie jesteś innoDB i nie martwisz się blokowaniem podczas zrzutu, skorzystaj z opcji:
źródło
--single-transaction
.FLUSH TABLES WITH READ LOCK
rzeczach.Odpowiedź różni się w zależności od używanego silnika pamięci. Idealnym scenariuszem jest użycie InnoDB. W takim przypadku możesz użyć
--single-transaction
flagi, która zapewni spójną migawkę bazy danych w momencie rozpoczęcia zrzutu.źródło
--skip-add-locks
pomógł miźródło
--skip-add-locks
po prostu przyspieszy przywracanie zrzutu. To nie jest poprawna odpowiedź.Aby zrzucić duże tabele, należy połączyć opcję --single-transakcję z --quick.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
źródło
W przypadku tabel InnoDB użyj flagi
--single-transaction
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
źródło
--skip-lock-tables
.Szczerze mówiąc, skonfigurowałbym do tego replikację, ponieważ jeśli nie zablokujesz tabel, otrzymasz niespójne dane z zrzutu.
Jeśli zrzut zajmuje więcej czasu, tabele, które zostały już zrzucone, mogły ulec zmianie wraz z tabelą, która ma zostać zrzucona.
Więc zablokuj tabele lub użyj replikacji.
źródło
To mniej więcej tak późno w porównaniu z facetem, który powiedział, że spóźnił się tak jak na pierwotną odpowiedź, ale w moim przypadku (MySQL przez WAMP na Windows 7) musiałem użyć:
źródło
źródło
Korzystając z MySQL Workbench, w opcji Eksport danych kliknij opcję Opcje zaawansowane i usuń zaznaczenie opcji blokowania tabel.
źródło
Ponieważ żadne z tych podejść nie działało dla mnie, po prostu zrobiłem:
Wyłączy to zarówno polecenia, jak
LOCK TABLE <x>
iUNLOCK TABLES
polecenia.Uwaga: mam nadzieję, że twoje dane nie zawierają tego ciągu!
źródło
W związku z https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
źródło
Kolejna późna odpowiedź:
Jeśli próbujesz wykonać kopię zapasową bazy danych serwera (w środowisku linux), a silnikiem bazy danych wszystkich tabel jest MyISAM, powinieneś użyć
mysqlhotcopy
.Zgodnie z dokumentacją:
LOCK TABLES
Czas zależy od czasu serwer może skopiować pliki MySQL (to nie robi zrzut).źródło
Dzisiaj nawet napotkałem ten sam problem, ale nie miałem dostępu do wiersza poleceń, więc otworzyłem plik sql w edytorze Notatnika i usunąłem poniżej wiersza z tabel
następnie zaimportowałem do mojego środowiska programistycznego. Działa dobrze. mam nadzieję, że to pomoże komuś
źródło