Ho 2 basi di dati, con ~ 100.000 righe mancante dalla tabella field_collection_item
da db1
, che mi piacerebbe riparare esportando da db2
.mysqldump con WHERE id IN (SELECT ...) produce tavola "non è stato bloccato" errore
Il mio piano per raggiungere questo obiettivo è stato quello di:
- identificare gli elementi mancanti dalla
item_id
indb2
, esportando l'elenco deiitem_id
s. - importare il
item_id
s indb1
in una nuova tabellamissing_field_collection_item
Utilizzando il seguente mysqldump per estrarre i dati:
mysqldump -u UTENTE -pPASS DATABASE --no-create-info --tables field_collection_item --where = "item_id IN (SELECT item_id FROM missing_field_collection_item);"
tuttavia questo dà l'errore:
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)
io preferirei fare questo senza apportare modifiche al db2
tuttavia non è strettamente necessario, se si scopre l'unico modo realistico per farlo è per eliminare le righe che non desidero e quindi eseguire il dump senza una clausola where.
UPDATE
ho scoperto le opere di cui sopra semplicemente con l'aggiunta --single-transaction
, che sembra per spegnere bloccaggio. Questo dovrebbe essere sicuro dal momento che db2
non è attivo, tuttavia non sono sicuro di aver capito alcun effetto collaterale, quindi non accetterò questo come risposta senza una seconda opinione.
fa elencare entrambe le tabelle nel comando '--tables'? – Stobor
Sì, comunque avrei bisogno di analizzare il dump ed escludere gli inserti 'missing_field_collection_item'. Non particolarmente difficile ma sembra solo un po 'sporco. Forse hai ragione, è meglio il diavolo che conosci. – DanH