sql >> データベース >  >> RDS >> Mysql

MacOSXでのMysql5.6の頭痛の種

    ここでの答えはどれも役に立ちませんでしたが、最終的にMySQL5.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/optimizing-table_open_cache/

    このエラーが発生するのはなぜですか?

    MySQL 5.6以降、innodb_file_per_tableオプションはデフォルトでオンになっています。これは、各テーブルのデータが独自のファイルに保存されることを意味します。開くファイル数のOSXのデフォルト制限は、プロセスごとに256です。通常、これは問題ではありませんが、私の場合、単体テストを並行して実行しています。これにより、それぞれ405個のテーブルを持つ8つのデータベースが作成されます。 OSXには、プロセスごとに開くファイルハンドルの数に制限があります。 このStackOverflowの回答 この制限は256であることが示唆されています。これは、私の問題を完全に説明しています。MySQL5.6より前は、これら8つのデータベースすべてのすべてのデータが1つのファイルに含まれていました。

    MySQLバグレポート を見つけてくれた同僚のThomasL.に感謝します。 これはこの解決策を示唆しました!



    1. JSON列の配列の要素をクエリします

    2. Spring MVCでサーバーに画像をアップロードし、mysqlデータベースに参照を保存する

    3. COUNT(rowid)はCOUNT(*)よりも高速ですか?

    4. PostgreSQL/MySQLで文字列から部分文字列を抽出する方法