Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql 5.6 главоболия на Mac OSX

Нито един от отговорите тук не ми помогна, но накрая накарах MySQL 5.6 да работи.

ТРИ опции за коригиране на MySQL 5.6:

  1. (потвърдено) Редактирайте /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, което е много над ограничението по подразбиране на 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 има ограничение за броя на манипулаторите на отворени файлове на процес. Този отговор на StackOverflow предполага, че това ограничение е 256, което обяснява проблема ми перфектно:преди MySQL 5.6 всички данни от всички тези 8 бази данни бяха в ЕДИН файл.

Благодаря на моя колега Томас Л., който намери доклад за грешки в MySQL което намекна за това решение!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP фатална грешка:Извикване на недефинирана функция mysqli_stmt_get_result()

  2. Използване на TIMESTAMP на MySQL срещу директно съхраняване на времеви печати

  3. codeigniter mysql ляво присъединяване включва изберете

  4. Посочване на конкретни полета със Sequelize (NodeJS) вместо *

  5. Създаване на колона с кумулативна сума в MySQL