Головные боли 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
Ответы
Ответ 1
Ни один из ответов здесь не помог мне, но, наконец, я получил MySQL 5.6 для работы.
ТРЕХ вариантов исправить MySQL 5.6:
-
(подтверждено) Редактировать /etc/my.cnf
(создать, если не существует) и добавить:
[mysqld]
innodb_file_per_table = OFF
и перезапустите MySQL. Затем для этого вам нужно будет сбросить базы данных в файл SQL (mysqldump), затем сбросить и повторно создать базы данных, а затем загрузить данные обратно.
-
Изменить значение ulimit по умолчанию для OSX (предлагается пользователем Github sodabrew): https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
Добавьте следующий раздел в раздел [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 в бутылках.