Нито един от отговорите тук не ми помогна, но накрая накарах MySQL 5.6 да работи.
ТРИ опции за коригиране на MySQL 5.6:
-
(потвърдено) Редактирайте
/etc/my.cnf
(създайте, ако не съществува) и добавете:[mysqld] innodb_file_per_table = OFF
и рестартирайте MySQL. След това, за да работи това, ще трябва да изхвърлите базите си данни в SQL файл (mysqldump), след това да пуснете и да създадете отново базите данни, след което да заредите данните обратно.
-
Промяна на стойността на Ulimit по подразбиране на OSX (предложена от потребителя на Github sodabrew ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
Добавете следната опция към секцията [mysqld] на my.cnf:
table_open_cache = 250
. По подразбиране е настроен на 2000, което е много над ограничението по подразбиране на OSX. Това решение също не се препоръчва, тъй като вреди на производителността на вашия MySQL - принуждава MySQL да отваря отново таблици често, ако имате повече от 250 таблици:https://mariadb.com/kb/en/optimizing-table_open_cache/
Защо се случва тази грешка?
Тъй като MySQL 5.6 опцията innodb_file_per_table е ВКЛЮЧЕНА по подразбиране, което означава, че данните на всяка таблица се съхраняват в собствен файл. Ограничението по подразбиране на OSX за броя на отворените файлове е 256 на процес. Обикновено това не е проблем, но в моя случай изпълнявам модулни тестове паралелно, което създава 8 бази данни с по 405 таблици всяка. OSX има ограничение за броя на манипулаторите на отворени файлове на процес. Този отговор на StackOverflow предполага, че това ограничение е 256, което обяснява проблема ми перфектно:преди MySQL 5.6 всички данни от всички тези 8 бази данни бяха в ЕДИН файл.
Благодаря на моя колега Томас Л., който намери доклад за грешки в MySQL което намекна за това решение!