Nessuna delle risposte qui mi ha aiutato, ma alla fine ho fatto funzionare MySQL 5.6.
TRE opzioni per correggere MySQL 5.6:
-
(confermato) Modifica
/etc/my.cnf
(crea se non esiste) e aggiungi:[mysqld] innodb_file_per_table = OFF
e riavvia MySQL. Quindi, affinché funzioni, dovrai eseguire il dump dei database in un file SQL (mysqldump), quindi rilasciare e ricreare i database, quindi caricare nuovamente i dati.
-
Modifica il valore ulimit predefinito di OSX (suggerito dall'utente Github sodabrew ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
Aggiungi la seguente opzione alla sezione [mysqld] di my.cnf:
table_open_cache = 250
. Per impostazione predefinita è impostato su 2000, che è molto al di sopra dell'ulimit predefinito di OSX. Anche questa soluzione non è consigliata, perché danneggia le prestazioni del tuo MySQL - costringe MySQL a riaprire spesso le tabelle, se hai più di 250 tabelle:https://mariadb.com/kb/en/optimizing-table_open_cache/
Perché si verifica questo errore?
Poiché l'opzione innodb_file_per_table di MySQL 5.6 è attiva per impostazione predefinita, il che significa che i dati di ogni tabella sono archiviati nel proprio file. Il limite predefinito di OSX del numero di file aperti è 256 per processo. Normalmente questo non è un problema, ma nel mio caso eseguo unit test in parallelo, che crea 8 database con 405 tabelle ciascuno. OSX ha un limite al numero di handle di file aperti per processo. Questa risposta StackOverflow suggerisce che questo limite sia 256, il che spiega perfettamente il mio problema:prima di MySQL 5.6 tutti i dati di tutti questi 8 database erano in UN unico file.
Grazie al mio collega Thomas L. che ha trovato una segnalazione di bug di MySQL che ha suggerito questa soluzione!