web-dev-qa-db-ja.com

Mac OSXでのMySQL 5.6の頭痛

同僚の何人かと私は最近、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を使用してこのエラーに気付きました。このエラーが発生し始めたら、使用するユーザー名に関係なく、現在の接続数を超えることはできないようです。接続を閉じると、再び開くことができます。

次の環境があります。

  • 私たちの一部: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

これを引き起こしている可能性のあるアイデアはありますか?

ありがとう!ジュリー

48
Julie

ここでの答えはどれも助けにはなりませんでしたが、ついにMySQL 5.6が機能するようになりました。

MySQL 5.6を修正する3つのオプション:

  1. (確認済み)編集/etc/my.cnf(存在しない場合は作成)および追加:

    [mysqld]
    innodb_file_per_table = OFF
    

mySQLを再起動します。次に、これを機能させるために、データベースをSQLファイル(mysqldump)にダンプし、データベースをドロップして再作成し、データをロードし直す必要があります。

  1. OSXのデフォルトのulimit値を変更します(Githubユーザーが推奨 sodabrew ): https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in -mac-os-x-10-6

  2. 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.に感謝します。

67
Alex Kovshovik

同じ問題がありました。これは私たちのためにそれを修正しました

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

これは、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バージョンをインストールした後にマスターに戻るよりも利点があるとは思いません。

4
Michael Klein

この問題は、MavenricksにHomebrewを介して新たにインストールしたmysql 5.6.16と、rbenvおよびRailsなど。

ここで他のソリューションを使用する前に再起動することにしました。問題が解決しました!

したがって、mysqlなどをインストールしてから再起動していない場合は、ここで回答を行う前に再起動することをお勧めします。

0
James

次の方法を使用すると、これが修正されることがわかりました。

brew install mysql --use-llvm

これは、OSX 10.8のrbenvのREE(1.8.7)のRails 2.3 ontop)にあります。YMMV

0
John Athayde

同じ設定で同じ問題が発生しています(mysql 5.6.12)。 homebrewでmysqlをバージョン5.6.13にアップグレードしたところ、問題はなくなりました。

0
Fabio