यह एक पुराना प्रश्न है, लेकिन मुझे यह आज ही मिल गया है, और एक समाधान मिल गया है (और हाँ errno =-1 के साथ)।
हमारी तालिका InnoDB है और इसे हर कुछ घंटों में बनाया और नष्ट कर दिया गया था। हमने हाल ही में उस मास्टर का अनुसरण करने के लिए एक गुलाम सर्वर शुरू किया था। हम "innodb_file_per_table" विकल्प का भी उपयोग करते हैं।
त्रुटि केवल दास पर होगी, स्वामी पर नहीं। समस्या यह थी कि हमने हाल ही में कुछ घंटे पहले rsync का उपयोग करके उस दास को स्वामी के साथ सिंक्रनाइज़ किया था।
Rsync ने तालिका फ़ाइल की प्रतिलिपि बनाई, लेकिन फिर इस बीच मास्टर द्वारा हटा दिया गया था, क्योंकि यह एक अस्थायी तालिका थी। इसलिए .idb फ़ाइल दास में मौजूद थी, लेकिन अब मास्टर में नहीं थी।
जब मास्टर ने तालिका बनाने का अनुरोध भेजा, तो दास नहीं कर सका क्योंकि फ़ाइल पहले से ही थी। MySQL इस बात से अनजान था कि एक टेबल मौजूद है क्योंकि मेटाडेटा ने कहा कि कोई टेबल नहीं है। मुझे लगता है कि MySQL फ़ाइल बनाने की कोशिश कर रहा था, लेकिन चूंकि यह वहां था, यह विफल रहा।
मेरे मामले में, समाधान किसी अन्य फ़ोल्डर में .idb फ़ाइल को हटाना था (निश्चित रूप से पहले बैकअप प्रतिलिपि के साथ)।
उसके बाद, डेटाबेस तब हमें तालिका बनाने की अनुमति देगा, और दास फिर से मास्टर का अनुसरण करेगा
ऐसा करने का एक बेहतर तरीका है कि rsync मास्टर से चली गई किसी भी पुरानी फ़ाइलों को हटाने के लिए --delete विकल्प का उपयोग करना होगा।
वैसे भी - हो सकता है कि आपके पास वह सटीक स्थिति न हो जैसा मैंने वर्णन किया है, लेकिन यह केवल एक पुरानी फ़ाइल हो सकती है जो किसी कारण या किसी अन्य कारण से वहां छोड़ी गई है।