यहां किसी भी उत्तर ने मेरी मदद नहीं की, लेकिन आखिरकार मुझे MySQL 5.6 काम करने के लिए मिला।
MySQL 5.6 को ठीक करने के लिए तीन विकल्प:
-
(पुष्टि की गई) संपादित करें
/etc/my.cnf
(यदि मौजूद नहीं है तो बनाएं) और जोड़ें:[mysqld] innodb_file_per_table = OFF
और MySQL को पुनरारंभ करें। फिर इसके लिए काम करने के लिए आपको अपने डेटाबेस को SQL फ़ाइल (mysqldump) में डंप करना होगा, फिर डेटाबेस को छोड़ना और फिर से बनाना होगा, फिर डेटा को वापस लोड करना होगा।
-
OSX का डिफ़ॉल्ट ulimit मान बदलें (Github उपयोगकर्ता sodabrew द्वारा सुझाया गया ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
my.cnf के [mysqld] अनुभाग में निम्नलिखित विकल्प जोड़ें:
table_open_cache = 250
. डिफ़ॉल्ट रूप से इसे 2000 पर सेट किया जाता है, जो OSX के डिफ़ॉल्ट ulimit से बहुत ऊपर है। यह समाधान भी अनुशंसित नहीं है, क्योंकि यह आपके MySQL के प्रदर्शन को नुकसान पहुंचाता है - यदि आपके पास 250 से अधिक टेबल हैं, तो यह MySQL को अक्सर तालिकाओं को फिर से खोलने के लिए मजबूर करता है:https://mariadb.com/kb/en/optimizing-table_open_cache/
यह त्रुटि क्यों हो रही है?
चूंकि MySQL 5.6 innodb_file_per_table विकल्प डिफ़ॉल्ट रूप से चालू है, जिसका अर्थ है कि प्रत्येक तालिका का डेटा अपनी फ़ाइल में संग्रहीत होता है। खुली फाइलों की संख्या की OSX डिफ़ॉल्ट सीमा 256 प्रति प्रक्रिया है। आम तौर पर यह कोई समस्या नहीं है, लेकिन मेरे मामले में मैं समानांतर में यूनिट परीक्षण चला रहा हूं, जो प्रत्येक में 405 टेबल के साथ 8 डेटाबेस बनाता है। OSX में प्रति प्रक्रिया खुली फ़ाइल हैंडल की संख्या की एक सीमा होती है। यह StackOverflow उत्तर सुझाव देता है कि यह सीमा 256 है, जो मेरी समस्या को पूरी तरह से समझाती है:MySQL 5.6 से पहले इन सभी 8 डेटाबेस से सभी डेटा एक फ़ाइल में था।
मेरे सहयोगी थॉमस एल को धन्यवाद, जिन्हें MySQL बग रिपोर्ट मिली। जिसने इस समाधान का संकेत दिया!