Dan*_*anH 19 mysql mysqldump where-clause
我有2个数据库,用〜100,000行从表中缺少field_collection_item的db1,我想通过出口来维修db2.
我实现这一目标的计划是:
item_idin 识别缺失的项目db2,导出item_ids 列表.item_ids导入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)
Run Code Online (Sandbox Code Playgroud)
我更愿意这样做而不进行更改,db2但是它并不是绝对必要的,如果事实证明这样做的唯一现实方法是删除我不想要的行然后在没有where子句的情况下转储.
UPDATE
我发现上面的工作只是通过添加--single-transaction,似乎关闭锁定.这应该是安全的,因为db2不是活的,但是我不自信我理解任何副作用,所以我不会接受这个作为没有第二意见的答案.
如果不需要一致性保证,则可以通过添加以下命令来禁用无单个事务的锁定:
--lock-tables = false
我用它来做您要做的事情(转储数据的子集)以及在复制从属服务器上可以停止的工作(无论如何使其保持一致)。
超过一个优点--single-transaction是您可以使用/混合非MVCC引擎表。
| 归档时间: |
|
| 查看次数: |
5246 次 |
| 最近记录: |