Etikettarkiv: keycache

Så tolkar du MySQL:s felkoder

Rätt ofta så stöter jag problem med MySQL som då spottar ur sig någon typ av felkod. Dessa felkoder och hur de uppkommer brukar jag tyvärr hinna glömma bort mellan varven så därför skriver jag ner dem här för att underlätta för mig och dig:

Följande felmeddelande:

  • ERROR 3 (HY000) at line 11619: Error writing file ‘/tmp/STUkun6Z’ (Errcode: 28)

Avkodas lättast genom att man skriver perror 28 vid en kommandotolk i Linux så bör något liknande komma fram:

  • OS error code  28:  No space left on device
Vilket är tämligen självförklarande. Slut på hårddiskutrymme på den monteringspunkten.
Om du sedemera utför någon typ av import eller dylikt som kan ta sjukt lång tid så brukar jag använda två bra trick:
  • Visa hur lång tid som är kvar av importen med följande kommandorad: pv filnamn.sql | mysql -u root -p (pv är ett användbart litet program som kan installeras via apt-get install pv)
Output blir ungefär följande då:
  • 10,9GB 1:24:51 [ 1,1kB/s] [=====>             ] 19% ETA 5:59:32
Och det andra tricket är att undersöka vad som händer genom SHOW PROCESSLIST vilket med fördel kan köras på följande sätt:
  • echo ‘show processlist’|mysql -u root -plösenord -B
Nu till nästa felmeddelande:
  • ERROR 1071 (42000) at line 11673: Specified key was too long; max key length is 1000 bytes
Det tog ett tag innan jag insåg hur detta felmeddelande uppstod och det var pga att InnoDB-motorn i min MySQL installation ej startades pga felaktiga konfigurationsvariabler i my.cnf och då gick MySQL automatiskt över till MyISAM. Denna ”bugg” har funnits i många år och upprört en hel del (se sista kommentaren här). Kan vara rätt jobbigt om man gör mysqldump på ett system för att sedan läsa in dumpen på ett annat system och det ej fungerar.
Nästa problematik är inte direkt ett felmeddelande utan någon jag stött på då en import tog sjuk lång tid. Vid undersökning så stod det ”repair by sorting” vilket är något som kan ta många timmar. Efter lite googlande så hittade jag att en snabbare repair finns och då skall följande meddelande visas vid SHOW PROCESSLIST: repair using keycache. Fixas genom att sätta myisam_max_sort_file_size=10G i my.cnf.
Om du använder dig av mysqlimport eller LOAD DATA INFILE och får något av följande felmeddelanden:
  • Error: 13, Can’t get stat of ‘/var/lib/mysql/Desktop/abc123′ (Errcode: 2)
  • File ‘/home/standage/Desktop/abc213′ not found (Errcode: 13)

Så beror det troligtvis på att du ej har behörighet eller att du ej angett hela sökvägen till filen. Brukar jag lösa genom att genomföra importen med ett mysql-root konto.

Uppdatering: Något annat som kan ställa till fel hos MySQL är nya AppArmor som standard används i senare versioner av Ubuntu. Om du ändrar exempelvis datadir så kommer det ej att fungera. Då måste du ändra i apparmor-profilen för MySQL.