我有 2 个数据库,表中缺少约 100,000 行field_collection_item
from db1
,我想通过导出来修复db2
.
我实现这一目标的计划是:
- 通过以下方式识别丢失的物品
item_id
in db2
,导出列表item_id
s.
- 导入
item_id
s into db1
到一个新表中missing_field_collection_item
-
使用以下 mysqldump 提取数据:
mysqldump -u USER -pPASS DATABASE --no-create-info --tables field_collection_item --where="item_id IN (从missing_field_collection_item中选择item_id);"
然而这给出了错误:
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
还没有上线,但是我不确定我是否理解任何副作用,所以如果没有第二意见,我不会接受这个答案。
如果您的表是 MyISAM,处理此问题最安全、最简单的方法是传递标志--lock-all-tables
。如果你的表是 InnoDB 那么--single-transaction
更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)