it-swarm.com.ru

Запустите MySQLDump без таблиц блокировки

Я хочу скопировать живую производственную базу данных в мою локальную базу данных разработки. Есть ли способ сделать это без блокировки производственной базы данных?

В настоящее время я использую:

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

Но он блокирует каждую таблицу во время работы.

400
Greg

Работает ли опция --lock-tables=false?

Согласно странице man , если вы создаете дамп таблиц InnoDB, вы можете использовать опцию --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.

Для innodb DB:

mysqldump --single-transaction=TRUE -u username -p DB
568
John Millikin

Это слишком поздно, но хорошо для тех, кто ищет тему. Если вы не innoDB и не беспокоитесь о блокировке во время дампа, просто используйте опцию:

--lock-tables=false
278
Warren Krewenki

Ответ зависит от того, какой механизм хранения вы используете. Идеальный сценарий, если вы используете InnoDB. В этом случае вы можете использовать флаг --single-transaction, который даст вам целостный снимок базы данных в момент начала дампа.

45
dvorak

--skip-add-locks помог мне

31
Azamat Tokhtaev

Чтобы создать дамп больших таблиц, вы должны объединить опцию --single-транзакции с --quick.

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

13
dgitman

Честно говоря, я бы настроил репликацию для этого, так как если вы не заблокируете таблицы, вы получите противоречивые данные из дампа.

Если дамп занимает больше времени, таблицы, которые уже были выгружены, могли измениться вместе с таблицей, которая только собирается быть сброшенной.

Поэтому либо блокируйте таблицы, либо используйте репликацию.

9
michal kralik

Для таблиц InnoDB используйте --single-транзакция

«он сбрасывает согласованное состояние базы данных в то время, когда был запущен BEGIN, не блокируя какие-либо приложения» MySQL DOCS

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

8
Lex

Это примерно так поздно, по сравнению с парнем, который сказал, что он опоздал, как и к первоначальному ответу, но в моем случае (MySQL через WAMP в Windows 7) мне пришлось использовать:

--skip-lock-tables
6
dtbarne
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
5
naveen_sfx

Из-за https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :

Некоторые параметры, такие как --opt (который включен по умолчанию), автоматически включают --lock-таблицы. Если вы хотите переопределить это, используйте --skip-lock-tables в конце списка опций.

1
Dmytro Gierman

При использовании MySQL Workbench в разделе «Экспорт данных» щелкните «Дополнительные параметры» и снимите флажки «таблицы блокировки».

 enter image description here

0
Samuel Diogo

Сегодня даже я столкнулся с той же проблемой, но у меня не было доступа к командной строке. Так что я открыл файл sql в редакторе блокнота и удалил нижнюю строку из таблиц 

LOCK TABLES `yourtable name` WRITE;

затем я импортировал в свою среду разработки. Работает нормально .. надеюсь, это поможет кому-нибудь

0
iCoders

Еще один поздний ответ:

Если вы пытаетесь сделать горячую копию базы данных сервера (в среде Linux) и ядром базы данных всех таблиц является MyISAM, вы должны использовать mysqlhotcopy.

Согласно документации:

Он использует FLUSH TABLES, LOCK TABLES и cp или scp для создания базы данных резервное копирование. Это быстрый способ сделать резервную копию базы данных или одного таблицы, но он может быть запущен только на том же компьютере, где база данных каталоги расположены. mysqlhotcopy работает только для резервного копирования MyISAM и ARCHIVE таблицы.

Время LOCK TABLES зависит от времени, когда сервер может копировать файлы MySQL (он не создает дамп).

0
Andrés Morales