sql >> Databáze >  >> RDS >> Mysql

Bolesti hlavy Mysql 5.6 na Mac OSX

Žádná z odpovědí mi nepomohla, ale nakonec jsem zprovoznil MySQL 5.6.

TŘI možnosti opravy MySQL 5.6:

  1. (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.

  1. 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

  2. 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í!



  1. SQLite CHECK omezení

  2. Proveďte dynamický křížový dotaz

  3. Jak změnit výchozí adresář dat MySQL/MariaDB v Linuxu

  4. Blokování '0000-00-00' z datových polí MySQL