Я хочу скопировать живую производственную базу данных в мою локальную базу данных разработки. Есть ли способ сделать это без блокировки производственной базы данных?
Я сейчас использую:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Но он блокирует каждую таблицу во время работы.
При использовании MySQL Workbench в разделе «Экспорт данных» щелкните «Дополнительные параметры» и снимите флажки «таблицы блокировки».
Сегодня Даже я столкнулся с той же проблемой, но у меня не было доступа к командной строке. Так что я открыл файл sql в редакторе Блокнота и удалил строку ниже из таблиц
LOCK TABLES `yourtable name` WRITE;
Затем я импортировал в свою среду разработки. Работает нормально. надеюсь, это поможет кому-то
Еще один поздний ответ:
Если вы пытаетесь сделать горячую копию серверной базы данных (в среде linux) и ядром базы данных всех таблиц является MyISAM, вы должны использовать mysqlhotcopy.
mysqlhotcopy
Согласно документации:
Он использует FLUSH TABLES, LOCK TABLES и cp или scp для создания базы данных резервное копирование. Это быстрый способ сделать резервную копию базы данных или одного таблицы, но он может быть запущен только на том же компьютере, где база данных каталоги расположены. mysqlhotcopy работает только для резервного копирования MyISAM и ARCHIVE таблицы.
Время LOCK TABLES зависит от времени, когда сервер может копировать файлы MySQL (он не создает дамп).
LOCK TABLES
Поскольку ни один из этих подходов не работал для меня, я просто сделал:
mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]
Это исключит команды LOCK TABLE <x> и UNLOCK TABLES.
LOCK TABLE <x>
UNLOCK TABLES
Примечание: Надеюсь, ваши данные не содержат этой строки!