Mam 2 bazy danych, z ~ 100 000 wierszy brakuje w tabeli field_collection_item
z db1
, które chciałbym naprawić eksportując od db2
.mysqldump z WHERE id IN (WYBIERZ ...) daje tabelę "nie został zablokowany" błąd
Mój plan był do osiągnięcia tego celu:
- zidentyfikować brakujące elementy przez
item_id
wdb2
, eksport listyitem_id
s. - importować
item_id
s dodb1
do nowej tabelimissing_field_collection_item
Korzystanie następujące mysqldump wyciągnąć dane:
mysqldump -u użytkownik -pPASS DATABASE --no-create-info --tables field_collection_item --where = "item_id IN (SELECT id_produktu z missing_field_collection_item);"
jednak daje to błąd:
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)
wolałbym to zrobić bez wprowadzania zmian do db2
jednak nie jest to bezwzględnie konieczne, jeśli okazuje się, że jedyną realną drogą do tego jest upuszczać wiersze, których nie chcę, a następnie zrzucać bez klauzuli where.
UPDATE
odkryłem powyższe prace po prostu dodając --single-transaction
, który wydaje się, aby wyłączyć blokadę. To powinno być bezpieczne, ponieważ db2
nie jest na żywo, jednak nie jestem pewien, czy rozumiem jakiekolwiek skutki uboczne, więc nie przyjmuję tego jako odpowiedzi bez drugiej opinii.
zawiera listę obu tabel w działaniu polecenia "--tables'? – Stobor
Tak, ale wtedy musiałbym przeanalizować zrzut i wykluczyć wstawki 'missing_field_collection_item'. Nie jest to szczególnie trudne, ale wydaje się trochę brudne. Może masz rację, lepiej, żebyś wiedział diabła. – DanH