同僚の何人かと私は最近、Macでhomebrewを使用してMySQL 5.5からMySQL 5.6にアップグレードし、サーバーをアップグレードする前にローカルでテストしました。このアップグレード以降、Rails=コードを実行すると、断続的なMySQLエラーが発生します。
Lost connection to MySQL server at 'sending authentication information', system error: 32
データベースでユーザー名とパスワードを再作成し、接続タイムアウトを増やしてみましたが、どちらも問題を修正していません。エラーログには問題が記載されていません。問題が発生したときに発見した唯一の回避策は、mysqlを強制終了して再起動することです。最近、コマンドラインでmysql -u root -p
を使用してこのエラーに気付きました。このエラーが発生し始めたら、使用するユーザー名に関係なく、現在の接続数を超えることはできないようです。接続を閉じると、再び開くことができます。
次の環境があります。
これを引き起こしている可能性のあるアイデアはありますか?
ありがとう!ジュリー
ここでの答えはどれも助けにはなりませんでしたが、ついにMySQL 5.6が機能するようになりました。
MySQL 5.6を修正する3つのオプション:
(確認済み)編集/etc/my.cnf
(存在しない場合は作成)および追加:
[mysqld]
innodb_file_per_table = OFF
mySQLを再起動します。次に、これを機能させるために、データベースをSQLファイル(mysqldump)にダンプし、データベースをドロップして再作成し、データをロードし直す必要があります。
OSXのデフォルトのulimit値を変更します(Githubユーザーが推奨 sodabrew ): https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in -mac-os-x-10-6
My.cnfの[mysqld]セクションに次のオプションを追加します。table_open_cache = 250
。デフォルトでは2000に設定されており、OSXのデフォルトのulimitをはるかに超えています。このソリューションもお勧めしません。MySQLのパフォーマンスが低下するためです。250を超えるテーブルがある場合、MySQLはテーブルを頻繁に再オープンします。 https://mariadb.com/kb/en/ optimize-table_open_cache /
なぜこのエラーが発生しているのですか?
MySQL 5.6のinnodb_file_per_tableオプションはデフォルトでONであるため、各テーブルのデータは独自のファイルに保存されます。 OSXの開いているファイルの数のデフォルト制限は、プロセスごとに256です。通常、これは問題ではありませんが、私の場合は、ユニットテストを並行して実行し、それぞれが405個のテーブルを持つ8つのデータベースを作成します。 OSXでは、プロセスごとに開くことができるファイルハンドルの数に制限があります。 このStackOverflowの答え は、この制限が256であることを示唆しています。これは、私の問題を完全に説明しています。
MySQLバグレポート を見つけた同僚のThomas L.に感謝します。
同じ問題がありました。これは私たちのためにそれを修正しました
project-root$ mysql.server stop
project-root$ gem uninstall mysql2
project-root$ bundle install
project-root$ mysql.server start
これは、homebrewを介してインストールされる最新のmysqlバージョンの問題です。
5.6.xは問題を引き起こします。 5.5.xにダウングレードすると、問題は解決しました。
Homebrewを使用すると、古い数式バージョンを簡単にインストールできます。
brew versions mysql
は、古いバージョンをインストールするために/ usr/localでチェックアウトする必要があるshaを提供します
cd /usr/local
git checkout 336c976
brew info mysql
これにより、5.5.29がmysqlバージョンとして表示されます。これらの instructions に基づいてmysqlをアンインストールし、実行するだけで再インストールできます。
brew install mysql
そして、homebrewで通常のインストールプロセスを実行します:
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
お役に立てば幸いです。
古いバージョンのmysqlを再度インストールした後、/ usr/localでマスターをチェックアウトできます。 brew versionsコマンドは、mysqlの式をチェックアウトするコマンドも提供しますが、shaのリポジトリ全体をチェックアウトし、古いmysqlバージョンをインストールした後にマスターに戻るよりも利点があるとは思いません。
この問題は、MavenricksにHomebrewを介して新たにインストールしたmysql 5.6.16と、rbenvおよびRailsなど。
ここで他のソリューションを使用する前に再起動することにしました。問題が解決しました!
したがって、mysqlなどをインストールしてから再起動していない場合は、ここで回答を行う前に再起動することをお勧めします。
次の方法を使用すると、これが修正されることがわかりました。
brew install mysql --use-llvm
これは、OSX 10.8のrbenvのREE(1.8.7)のRails 2.3 ontop)にあります。YMMV
同じ設定で同じ問題が発生しています(mysql 5.6.12)。 homebrewでmysqlをバージョン5.6.13にアップグレードしたところ、問題はなくなりました。