我有2個數據庫,約有100,000行丟失從表field_collection_item
從db1
,我想通過從db2
。mysqldump與WHERE ID IN(SELECT ...)產生表「未鎖定」錯誤
我的計劃來完成這個是:
- 通過
item_id
在db2
標識缺項,出口的item_id
是清單。 - 導入
item_id
s轉換db1
到一個新表missing_field_collection_item
使用以下的mysqldump提取數據:
的mysqldump -u用戶-pPASS DATABASE --no創建-信息--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
沒有生效,但是我不確定我是否理解任何副作用,所以我不會接受這個答案而沒有第二個意見。
確實在'--tables'命令中列出了兩個表的工作? – Stobor
是的,然後我需要解析轉儲並排除'missing_field_collection_item'插入。不是特別困難,但它似乎有點骯髒。也許你是對的,你知道的魔鬼更好。 – DanH