テーブルから〜100,000行が抜けている2つのデータベースがあります db1
から修復したいdb2
。 item_id
のリストをエクスポートし、db2
でitem_id
で不足している項目を識別WHERE ID IN(SELECT ...)を使用してmysqldumpがテーブル「ロックされていませんでした」エラーを返します
- :これを達成する
私の計画をしました。
- データを取得するために、次のmysqldumpを使用して、新しいテーブルに
db1
missing_field_collection_item
へ
item_id
Sをインポートします。--no-作成-情報のmysqldump -u USER -pPASS DATABASEはfield_collection_itemを--tables --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
はライブではないので、安全であるはずですが、私は副作用を理解しているとは確信していませんので、2番目の意見なしにこれを答えとして受け入れません。
'--tables'コマンドの両方のテーブルをリスト表示しませんか? – Stobor
はい、しかし、私はダンプを解析し、 'missing_field_collection_item'の挿入を除外する必要があります。それほど難しいことではありませんが、ちょっと汚いようです。たぶんあなたは正しいですが、それはあなたが知っている悪魔の方がいいです。 – DanH