sql >> Database teknologi >  >> RDS >> Mysql

Mysql 5.6 hovedpine på Mac OSX

Ingen af ​​svarene her hjalp mig, men endelig fik jeg MySQL 5.6 til at virke.

TRE muligheder for at rette MySQL 5.6:

  1. (bekræftet) Rediger /etc/my.cnf (opret hvis den ikke findes) og tilføj:

    [mysqld]
    innodb_file_per_table = OFF
    

og genstart MySQL. For at dette skal virke, skal du dumpe dine databaser i SQL-filen (mysqldump), derefter slippe og genskabe databaserne og derefter indlæse dataene tilbage.

  1. Skift standard ulimit-værdi for OSX (foreslået af Github-bruger sodabrew ):https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6

  2. Tilføj følgende mulighed til [mysqld] sektionen af ​​my.cnf:table_open_cache = 250 . Som standard er den indstillet til 2000, hvilket er langt over OSX's standardgrænse. Denne løsning anbefales heller ikke, fordi den skader ydeevnen af ​​din MySQL - den tvinger MySQL til ofte at genåbne tabeller, hvis du har mere end 250 borde:https://mariadb.com/kb/en/optimizing-table_open_cache/

Hvorfor sker denne fejl?

Da MySQL 5.6 innodb_file_per_table indstilling er TIL som standard, hvilket betyder, at hver tabels data er gemt i sin egen fil. OSX standardgrænse for antallet af åbne filer er 256 pr. proces. Normalt er dette ikke et problem, men i mit tilfælde kører jeg enhedstests parallelt, hvilket skaber 8 databaser med hver 405 tabeller. OSX har en grænse for antallet af åbne filhåndtag pr. proces. Dette StackOverflow-svar antyder, at denne grænse er 256, hvilket forklarer mit problem perfekt:før MySQL 5.6 var alle data fra alle disse 8 databaser i EN fil.

Tak til min kollega Thomas L., som fandt en MySQL fejlrapport som antydede denne løsning!



  1. Kontrollerer for maksimal længde af på hinanden følgende dage, som opfylder specifikke betingelser

  2. Indsættelse af $variable eller $_POST-værdi i mysql-tabellen

  3. Tilføj en automatisk stigning primærnøgle til eksisterende tabel i Oracle

  4. MYSQL Geo Search med distanceydelse