Я хочу скопировать живую производственную базу данных в мою локальную базу данных разработки. Есть ли способ сделать это без блокировки производственной базы данных?
В настоящее время я использую:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Но он блокирует каждую таблицу во время работы.
Ответы:
Имеет ли
--lock-tables=false
вариант работы?Согласно man-странице , если вы создаете дамп таблиц InnoDB, вы можете использовать
--single-transaction
опцию:Для БД innodb :
источник
Это слишком поздно, но хорошо для тех, кто ищет тему. Если вы не innoDB и не беспокоитесь о блокировке во время дампа, просто используйте опцию:
источник
--single-transaction
.FLUSH TABLES WITH READ LOCK
вещах.Ответ зависит от того, какой механизм хранения вы используете. Идеальный сценарий, если вы используете InnoDB. В этом случае вы можете использовать
--single-transaction
флаг, который даст вам целостный снимок базы данных в момент начала дампа.источник
--skip-add-locks
помог мнеисточник
--skip-add-locks
просто сделают восстановление дампа быстрее. Это не правильный ответ.Чтобы получить дамп больших таблиц, вы должны объединить опцию --single-транзакции с --quick.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
источник
Для таблиц InnoDB используйте флаг
--single-transaction
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
источник
--skip-lock-tables
.Честно говоря, я бы настроил репликацию для этого, так как, если вы не заблокируете таблицы, вы получите противоречивые данные из дампа.
Если дамп занимает больше времени, таблицы, которые уже были выгружены, могли бы измениться вместе с таблицей, которая только собирается быть сброшенной.
Поэтому либо блокируйте таблицы, либо используйте репликацию.
источник
Это примерно так поздно, по сравнению с парнем, который сказал, что он опоздал, как и к первоначальному ответу, но в моем случае (MySQL через WAMP в Windows 7) мне пришлось использовать:
источник
источник
При использовании MySQL Workbench в разделе «Экспорт данных» щелкните «Дополнительные параметры» и снимите флажки «таблицы блокировки».
источник
Поскольку ни один из этих подходов не работал для меня, я просто сделал:
Это исключит как
LOCK TABLE <x>
иUNLOCK TABLES
команды.Примечание: надеюсь, ваши данные не содержат этой строки!
источник
Из-за https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
источник
Еще один поздний ответ:
Если вы пытаетесь сделать горячую копию серверной базы данных (в среде Linux) и ядром базы данных всех таблиц является MyISAM, вам следует использовать
mysqlhotcopy
.Согласно документации:
LOCK TABLES
Время зависит от времени сервер может копировать файлы MySQL (это не делает дамп).источник
Сегодня даже я столкнулся с той же проблемой, но у меня не было доступа к командной строке. Так что я открыл файл sql в редакторе блокнота и удалил нижнюю строку из таблиц
Затем я импортировал в свою среду разработки. Работает нормально. надеюсь, это поможет кому-то
источник