Nenhuma das respostas aqui me ajudou, mas finalmente consegui fazer o MySQL 5.6 funcionar.
TRÊS opções para corrigir o MySQL 5.6:
-
(confirmado) Editar/etc/my.cnf
(crie se não existir) e adicione:
[mysqld] innodb_file_per_table = OFF
e reinicie o MySQL. Então, para que isso funcione, você precisará despejar seus bancos de dados no arquivo SQL (mysqldump), depois soltar e recriar os bancos de dados e carregar os dados de volta.
-
Altere o valor ulimit padrão do OSX (sugerido pelo usuário do Github sodabrew ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
Adicione a seguinte opção à seção [mysqld] de my.cnf:table_open_cache = 250
. Por padrão, é definido como 2000, que está muito acima do ulimit padrão do OSX. Esta solução também não é recomendada, pois prejudica o desempenho do seu MySQL - força o MySQL a reabrir tabelas com frequência, se você tiver mais de 250 tabelas:https://mariadb.com/kb/en/optimizing-table_open_cache/
Por que esse erro está acontecendo?
Como a opção innodb_file_per_table do MySQL 5.6 está ativada por padrão, o que significa que os dados de cada tabela são armazenados em seu próprio arquivo. O limite padrão do OSX do número de arquivos abertos é 256 por processo. Normalmente isso não é um problema, mas no meu caso estou executando testes unitários em paralelo, o que cria 8 bancos de dados com 405 tabelas cada. O OSX tem um limite do número de identificadores de arquivos abertos por processo. Esta resposta do StackOverflow sugere que esse limite seja 256, o que explica perfeitamente meu problema:antes do MySQL 5.6 todos os dados de todos esses 8 bancos de dados estavam em UM arquivo.
Obrigado ao meu colega Thomas L. que encontrou um relatório de bug do MySQL que sugeriu esta solução!