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

mysql database

326693 просмотра

14 ответа

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

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

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

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

Автор: Greg Источник Размещён: 17.05.2019 02:54

Ответы (14)


568 плюса

Решение

Имеет ли --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 :

mysqldump --single-transaction=TRUE -u username -p DB
Автор: John Millikin Размещён: 19.09.2008 07:09

278 плюса

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

--lock-tables=false
Автор: Warren Krewenki Размещён: 11.08.2009 10:20

45 плюса

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

Автор: dvorak Размещён: 19.09.2008 08:19

31 плюса

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

Автор: Azamat Tokhtaev Размещён: 16.12.2010 11:43

13 плюса

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

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

Автор: dgitman Размещён: 04.05.2012 07:10

9 плюса

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

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

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

Автор: michal kralik Размещён: 19.09.2008 07:44

8 плюса

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

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

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

Автор: Lex Размещён: 10.01.2013 06:40

6 плюса

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

--skip-lock-tables
Автор: dtbarne Размещён: 23.05.2012 07:48

5 плюса

    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
Автор: naveen_sfx Размещён: 01.05.2012 09:07

1 плюс

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

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

Автор: Dmytro Gierman Размещён: 17.10.2018 02:19

0 плюса

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

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

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

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

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

Автор: Andrés Morales Размещён: 12.08.2017 12:43

0 плюса

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

LOCK TABLES `yourtable name` WRITE;

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

Автор: iCoders Размещён: 10.09.2018 06:03

0 плюса

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

введите описание изображения здесь

Автор: Samuel Diogo Размещён: 28.02.2019 06:08

-1 плюса

Поскольку ни один из этих подходов не работал для меня, я просто сделал:

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

Это исключит как LOCK TABLE <x>и UNLOCK TABLESкоманды.

Примечание. Надеюсь, ваши данные не содержат этой строки!

Автор: Augusto Men Размещён: 18.10.2016 04:48
32x32