Подтвердить что ты не робот

Головные боли Mysql 5.6 на Mac OSX

Некоторые из моих коллег и я недавно обновили с MySQL 5.5 до MySQL 5.6 с помощью homebrew на наших компьютерах Mac для тестирования локально, прежде чем обновлять наши серверы. Начиная с этого обновления, мы все время сталкивались с прерывистыми ошибками MySQL при запуске нашего кода rails:

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

Мы попытались переименовать наши имена пользователей и пароли в нашей базе данных и увеличить тайм-аут соединения, но не устранили проблему. В журналах ошибок не упоминается проблема. Единственное обходное решение, которое мы обнаружили при запуске проблемы, - это убить mysql и перезапустить его. Я еще недавно заметил эту ошибку, используя mysql -u root -p в командной строке. Кажется, что как только я начну получать эту ошибку, я не могу превышать мое текущее количество подключений независимо от того, какое имя пользователя я использую. Если я закрываю соединение, я могу его снова открыть.

У нас есть следующие среды:

  • некоторые из нас: Rails 3.2, Ruby 2, mysql2 0.3.13, MySQL 5.6.12, Mac OSX 10.8.4
  • другие из нас: Rails 3.2, Ruby 1.9, mysql2 0.3.13, MySQL 5.6.10, Mac OSX 10.8.4

Любые идеи, что может быть причиной этого?

Спасибо! Julie

4b9b3361

Ответ 1

Ни один из ответов здесь не помог мне, но, наконец, я получил MySQL 5.6 для работы.

ТРЕХ вариантов исправить MySQL 5.6:

  • (подтверждено) Редактировать /etc/my.cnf (создать, если не существует) и добавить:

    [mysqld]
    innodb_file_per_table = OFF
    

и перезапустите MySQL. Затем для этого вам нужно будет сбросить базы данных в файл SQL (mysqldump), затем сбросить и повторно создать базы данных, а затем загрузить данные обратно.

  1. Изменить значение ulimit по умолчанию для OSX (предлагается пользователем Github sodabrew): https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6

  2. Добавьте следующий раздел в раздел [mysqld] my.cnf: table_open_cache = 250. По умолчанию установлено значение 2000, что выше уровня ulimit по умолчанию 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 имеет ограничение на количество открытых дескрипторов файлов для каждого процесса. fooobar.com/questions/130483/... предполагает, что этот предел равен 256, что прекрасно объясняет мою проблему: перед MySQL 5.6 все данные из всех этих 8 баз данных были в ОДНОМ файле.

Благодаря моему коллеге Томасу Л., который нашел отчет об ошибке MySQL, который намекнул на это решение!

Ответ 2

У нас была та же проблема. Это фиксировало это для нас

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

Ответ 3

Это проблема с последней версией mysql, которая устанавливается через homebrew.

5.6.x создает проблему. понижение до 5.5.x решило проблему для меня.

Вы можете легко установить старые версии формул с помощью homebrew:

brew versions mysql предоставит вам sha, вы должны проверить в /usr/local, чтобы иметь возможность установить старую версию

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

Это покажет вам 5.5.29 как версию mysql. Затем вы можете удалить mysql на основе этих инструкций и переустановить, просто запустив

   brew install mysql

и выполните обычный процесс установки с помощью homebrew:

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

Надеюсь, что это поможет.

Вы можете проверить мастер в /usr/local после повторной установки старой версии mysql. Команда версии brew даже дает вам команду просто проверить формулу для mysql, но я не думаю, что у нее есть какие-то преимущества перед тем, как просто проверить весь репозиторий для sha, а затем вернуться к мастеру после установки старой версии mysql.

Ответ 4

Мы обнаружили, что использование следующих исправлений для нас:

brew install mysql --use-llvm

Это на рельсах 2.3 ontop REE (1.8.7) в rbenv на OSX 10.8. YMMV

Ответ 5

У меня такая же проблема в той же конфигурации (mysql 5.6.12). Я только что обновил mysql с помощью homebrew до версии 5.6.13, и проблема исчезла.

Ответ 6

Я столкнулся с этой проблемой с mysql 5.6.16, недавно установленным через Homebrew на Mavericks, наряду с rbenv и rails и т.д.

Решили перезагрузиться, прежде чем работать с другими решениями здесь. Проблема решена!

Итак, если вы не перезагрузились с момента установки mysql и т.д., я бы рекомендовал перезагрузить его, прежде чем работать с ответами здесь.

Ответ 7

В Mavericks это сработало для меня:

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

Я переустановил Homebrew после перехода на Mavericks. Homebrew установил версию MySQL версии 5.6.13 в бутылках.