Žádná z odpovědí mi nepomohla, ale nakonec jsem zprovoznil MySQL 5.6.
TŘI možnosti opravy MySQL 5.6:
-
(potvrzeno) Upravte
/etc/my.cnf
(vytvořit, pokud neexistuje) a přidat:[mysqld] innodb_file_per_table = OFF
a restartujte MySQL. Pak, aby to fungovalo, budete muset své databáze vypsat do souboru SQL (mysqldump), poté zahodit a znovu vytvořit databáze a poté načíst data zpět.
-
Změňte výchozí hodnotu ulimit OSX (navrženo uživatelem Github sodabrew ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6
-
Přidejte následující možnost do sekce [mysqld] souboru my.cnf:
table_open_cache = 250
. Ve výchozím nastavení je nastaveno na 2000, což je výrazně nad výchozím ulimitem OSX. Toto řešení se také nedoporučuje, protože snižuje výkon vašeho MySQL – nutí MySQL často znovu otevírat tabulky, pokud máte více než 250 tabulek:https://mariadb.com/kb/en/optimizing-table_open_cache/
Proč k této chybě dochází?
Protože MySQL 5.6 je volba innodb_file_per_table standardně zapnutá, což znamená, že data každé tabulky jsou uložena ve vlastním souboru. Výchozí limit počtu otevřených souborů OSX je 256 na proces. Normálně to není problém, ale v mém případě spouštím paralelní testy jednotek, což vytvoří 8 databází se 405 tabulkami. OSX má limit počtu otevřených popisovačů souborů na proces. Tato odpověď StackOverflow naznačuje, že tento limit je 256, což dokonale vysvětluje můj problém:před MySQL 5.6 byla všechna data ze všech těchto 8 databází v JEDNOM souboru.
Děkuji mému kolegovi Thomasi L., který našel hlášení o chybě MySQL který naznačoval toto řešení!