Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Dores de cabeça do MySQL 5.6 no Mac OSX


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:

  1. (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.

  1. 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

  2. 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!