Mysql 5.6 maux de tête sur Mac OSX

Plusieurs de mes collègues et moi-même avons récemment effectué une mise à niveau de MySQL 5.5 vers MySQL 5.6 en utilisant l’homebrew sur nos Mac pour tester localement avant de mettre à niveau nos serveurs. Depuis cette mise à jour, nous avons tous rencontré des erreurs MySQL intermittentes lors de l’exécution de notre code Rails:

Lost connection to MySQL server at 'sending authentication information', system error: 32

Nous avons essayé de recréer nos noms d’utilisateur et mots de passe dans notre firebase database et d’augmenter le délai de connexion, mais aucun n’a résolu le problème. Les journaux d’erreur ne mentionnent pas le problème. La seule solution que nous avons trouvée lorsque nous rencontrons le problème est de tuer mysql et de le redémarrer. J’ai même remarqué cette erreur plus récemment en utilisant mysql -u root -p sur la ligne de commande. Il semble qu’une fois que je commence à avoir cette erreur, je ne peux pas dépasser mon nombre actuel de connexions, quel que soit le nom d’utilisateur que j’utilise. Si je ferme une connexion, alors je peux en rouvrir une.

Nous avons les environnements suivants:

  • certains d’entre nous: Rails 3.2, Ruby 2, mysql2 0.3.13, MySQL 5.6.12, Mac OSX 10.8.4
  • d’autres d’entre nous: Rails 3.2, Ruby 1.9, mysql2 0.3.13, MySQL 5.6.10, Mac OSX 10.8.4

Toutes les idées qui pourraient causer cela?

Merci! Julie

Aucune des réponses ici ne m’a aidé, mais finalement, MySQL 5.6 a fonctionné.

TROIS options pour réparer MySQL 5.6:

  1. (confirmé) Modifiez /etc/my.cnf (créer s’il n’existe pas) et ajoutez:

     [mysqld] innodb_file_per_table = OFF 

et redémarrez MySQL. Ensuite, pour que cela fonctionne, vous devez vider vos bases de données dans un fichier SQL (mysqldump), puis déposer et recréer les bases de données, puis charger les données.

  1. Modifiez la valeur ulimit par défaut d’OSX (suggérée par l’utilisateur de Github sodabrew ): https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6

  2. Ajoutez l’option suivante à la section [mysqld] de my.cnf: table_open_cache = 250 . Par défaut, il est défini sur 2000, ce qui est bien au-dessus de l’ulimit par défaut d’OSX. Cette solution est également déconseillée, car elle nuit aux performances de MySQL – elle oblige MySQL à rouvrir les tables souvent, si vous avez plus de 250 tables: https://mariadb.com/kb/en/optimizing-table_open_cache/

Pourquoi cette erreur se produit-elle?

Depuis MySQL 5.6, l’option innodb_file_per_table est activée par défaut, ce qui signifie que les données de chaque table sont stockées dans son propre fichier. La limite par défaut d’OSX du nombre de fichiers ouverts est de 256 par processus. Normalement, ce n’est pas un problème, mais dans mon cas, je lance des tests unitaires en parallèle, ce qui crée 8 bases de données avec 405 tables chacune. OSX a une limite du nombre de descripteurs de fichiers ouverts par processus. Cette réponse StackOverflow suggère que cette limite est de 256, ce qui explique parfaitement mon problème: avant MySQL 5.6, toutes les données de ces 8 bases de données étaient dans un seul fichier.

Merci à mon collègue Thomas L. qui a trouvé un rapport de bogue MySQL qui faisait allusion à cette solution!

Nous avons eu le même problème. Cela a corrigé pour nous

 project-root$ mysql.server stop project-root$ gem uninstall mysql2 project-root$ bundle install project-root$ mysql.server start 

C’est un problème avec la dernière version de mysql installée via homebrew.

5.6.x crée le problème. rétrograder à 5.5.x a résolu le problème pour moi.

Vous pouvez installer les anciennes versions de formules assez facilement avec homebrew:

brew versions mysql vous donneront le sha que vous devez récupérer dans / usr / local pour pouvoir installer une ancienne version

  cd /usr/local git checkout 336c976 brew info mysql 

Ceci vous montrera 5.5.29 comme version de mysql. Vous pouvez ensuite désinstaller mysql sur la base de ces instructions et réinstaller simplement en exécutant

  brew install mysql 

et exécuter le processus d’installation normal avec homebrew:

  unset TMPDIR mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp 

J’espère que cela pourra aider.

Vous pouvez récupérer le fichier master dans / usr / local après avoir réinstallé l’ancienne version de mysql. La commande des versions de brew vous donne même la commande de simplement extraire la formule de mysql mais je ne pense pas que cela présente des avantages par rapport à la vérification de l’ensemble du repository pour revenir à la base après l’installation de l’ancienne version de mysql.

Nous avons constaté que l’utilisation des correctifs suivants résout ce problème pour nous:

 brew install mysql --use-llvm 

Ceci est sur un rail 2.3 sur REE (1.8.7) dans rbenv sur OSX 10.8. YMMV

J’ai le même problème sur la même configuration (mysql 5.6.12). Je viens de mettre à jour mysql avec homebrew vers la version 5.6.13 et le problème est parti.

J’ai rencontré ce problème avec mysql 5.6.16, récemment installé via Homebrew sur Mavericks, ainsi que rbenv et rails, etc.

Décidé de redémarrer avant de passer par les autres solutions ici. Problème résolu!

Donc, si vous n’avez pas redémarré depuis l’installation de mysql, etc., je vous recommande de redémarrer avant de résoudre les problèmes ici.

Sur Mavericks, cela a fonctionné pour moi:

 mysql.server stop brew install mysql mysql.server start gem remove mysql2 gem install mysql2 

J’ai réinstallé Homebrew après la mise à niveau vers Mavericks. Homebrew a installé la version embouteillée de MySQL 5.6.13.