मैं, 2 डेटाबेस है ~ 100,000 पंक्तियों db1
, जो मैं db2
से निर्यात से मरम्मत करने के लिए करना चाहते हैं से तालिका field_collection_item
से लापता के साथ ।mysqldump "बंद नहीं किया गया था" त्रुटि
मेरे यह पूरा करने की योजना के लिए गया था:
db2
मेंitem_id
से लापता आइटम की पहचान,item_id
रों की सूची निर्यात।- एक नई तालिका
missing_field_collection_item
में
db1
में आयातitem_id
डेटा खींचने के लिए निम्नलिखित mysqldump का उपयोग करना: --no-बनाने-की जानकारी field_collection_item --tablesmysqldump -u उपयोगकर्ता -pPASS डाटाबेस --where = "item_id IN (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
में बदलाव किए बिना यह करने के लिए पसंद करेंगे:
लेकिन इस त्रुटि देता है उन पंक्तियों को छोड़ने के लिए जिन्हें मैं नहीं चाहता हूं और फिर बिना किसी खंड के डंप करें।
अद्यतन
मैं बस --single-transaction
जोड़ने, जो ताला बंद करने के लिए लगता है से ऊपर काम करता है की खोज की। यह सुरक्षित होना चाहिए क्योंकि db2
लाइव नहीं है, हालांकि मुझे विश्वास नहीं है कि मैं किसी भी दुष्प्रभाव को समझता हूं, इसलिए मैं इसे दूसरी राय के बिना उत्तर के रूप में स्वीकार नहीं करूंगा।
'--tables' कमांड काम में दोनों टेबल सूचीबद्ध करता है? – Stobor
हां, फिर भी मुझे डंप को पार्स करने और 'missing_field_collection_item' प्रविष्टियों को बाहर करने की आवश्यकता होगी। विशेष रूप से मुश्किल नहीं है लेकिन यह थोड़ा गंदा लगता है। हो सकता है कि आप सही हों, यह बेहतर शैतान है जिसे आप जानते हैं। – DanH