Вопрос по mysql, database – Запустите MySQLDump без таблиц блокировки

406

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

Я сейчас использую:

<code>mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
</code>

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

Еще одно запоздалое решение: вы также можете использовать Percona XtraBackup для выгрузки производственной базы данных без прерывания обработки транзакций. Это позволяет делать горячее резервное копирование, то есть не влияет на текущую активность. Посмотреть здесь:percona.com/software/mysql-database/percona-xtrabackup (У меня нет никакого отношения к Перконе.) delx

Ваш Ответ

14   ответов
30

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded--skip-add-locksError: User Rate Limit ExceedednotError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
13

вы должны объединить опцию --single -action с --quick.

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

Error: User Rate Limit Exceeded
0

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

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

It uses FLUSH TABLES, LOCK TABLES, and cp or scp to make a database backup. It is a fast way to make a backup of the database or single tables, but it can be run only on the same machine where the database directories are located. mysqlhotcopy works only for backing up MyISAM and ARCHIVE tables.

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

9

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Greg
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
-1

я просто сделал:

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

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

Note: Надеемся, что ваши данные не содержат этой строки!

Error: User Rate Limit Exceeded
0

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

LOCK TABLES `yourtable name` WRITE;

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

8

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

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

1

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

Some options, such as --opt (which is enabled by default), automatically enable --lock-tables. If you want to override this, use --skip-lock-tables at the end of the option list.

278

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

--lock-tables=false
Error: User Rate Limit ExceededshouldError: User Rate Limit Exceeded--single-transaction.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededin betweenError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Дополнительные параметры» и снимите флажок «таблицы блокировки». опции.

enter image description here

572

--lock-tables=false вариант работы?

Согласносправочная страница, если вы сбрасываете таблицы 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
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
45

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

6

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

--skip-lock-tables
Error: User Rate Limit Exceeded

Похожие вопросы