Скопируйте некоторые данные из базы данных и сохраните ссылочную целостность - PullRequest
0 голосов
/ 29 мая 2019

Требуется извлечь некоторые данные из активной базы данных (в настоящий момент 159 таблиц) в другую базу данных, чтобы скопированные данные имели полную ссылочную целостность, в то время как данные находятся в движении (это живая база данных).Речь идет не о выгрузке всей базы данных (размером около 50 ГБ), а просто о выделении некоторых строк, которые мы идентифицировали из всей базы данных, в отдельную базу данных.

В настоящее время мы создаем новую БД на основе нашей исходной схемы и последующего DDLмиграции и повторяемости (представления, хранимые процедуры и т. д.), а затем скопируйте соответствующие строки.Обычно это занимает более 10 минут, но менее 1 часа, в зависимости от размера извлекаемого набора.

Есть ли способ сообщить mysql, что я хочу игнорировать любые транзакции, принятые после того, как я запустилизвлекать, будь то добавленные новые строки, удаленные строки или обновленные строки, но любое другое соединение с базой данных просто продолжает работать как обычно, как если бы я не делал никаких запросов.

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

1 Ответ

0 голосов
/ 29 мая 2019

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


Re ваш обновленный вопрос:

Вы можете выполнять свои собственные запросы в транзакции.

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

Вы можете прочитать https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...