У меня есть 2 базы данных, из которых <100 > нет строк в таблице field_collection_item
из db1
, которые я хотел бы восстановить, экспортировав из db2
.
Мой план состоит в следующем:
- идентифицировать отсутствующие элементы
item_id
вdb2
, экспортируя списокitem_id
s. - импортируйте
item_id
вdb1
в новую таблицуmissing_field_collection_item
-
Используя следующий mysqldump, вытащите данные:
mysqldump -u USER -pPASS DATABASE --no-create-info --tables field_collection_item --where = "item_id IN (SELECT item_id FROM missing_field_collection_item);
однако это дает ошибку:
Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `field_collection_item` WHERE item_id IN (SELECT item_id FROM missing_field_collection_item);': Table 'missing_field_collection_item' was not locked with LOCK TABLES (1100)
Я бы предпочел сделать это, не внося изменения в db2
, но это не является строго необходимым, если окажется, что единственный реалистичный способ сделать это - отказаться от строк, которые я не хочу, а затем сбросить без предложения where.
UPDATE
Я обнаружил вышеуказанные работы просто добавив --single-transaction
, который, кажется, отключает блокировку. Это должно быть безопасным, так как db2
не является живым, однако я не уверен, что понимаю любые побочные эффекты, поэтому я не буду принимать это как ответ без второго мнения.