FÖRORD: Det här låter dåligt, men se till att läsa allt i det här svaret innan du agerar. Du kan inte bryta saker värre genom att ta dig tid. Läs varje steg och förhoppningsvis kommer detta att vara tillräckligt tydligt för att du ska kunna följa och få igång din MySQL-databasserver i MAMP Pro igen.
Så det verkar som om dina InnoDB-databaser kraschade. Inte själva appen. Nyckeln finns här i loggen:
140527 15:06:58 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 791075520
140527 15:06:58 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 791076717
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 8402.
InnoDB: You may have to recover from a backup.
Och det ser ut som att du använder MAMP PRO här:
/Library/Application Support/appsolute/MAMP PRO/db/mysql
Så frågan är, har du en säkerhetskopia av MAMP Pro-databaserna? Antingen via mysqldump
eller något annat? Har du andra InnoDB-databaser i din MAMP-installation?
Du säger också att du kunde köra mysqldump
, men det är verkligen inte möjligt att databasen kraschade. Så jag antar när du körde mysqldump
det var en annan, separat installation av MySQL på ditt system. MySQL-binärfilerna som mysqldump
i MAMP eller MAMP Pro är inte samma som den systemomfattande mysqldump
. Det är två 100% olika installationer. Du kan kontrollera vilken mysqldump
används genom att skriva in det här kommandot:
which mysqldump
För att se hela vägen för vad du tror att du använde. MAMP-installationen av mysqldump
—och andra relaterade binärer—finns här:
/Applications/MAMP/Library/bin/
Och att köra det direkt utan att ändra din $PATH
värde (en helt annan sak) är att köra det så här:
/Applications/MAMP/Library/bin/mysqldump
LÄS NOGGRANT: Observera att rådet jag ger dig nedan är att jag presenterar alla sätt jag skulle kunna hantera en situation som denna. Om InnoDB-databasen inte är viktig, gör bara mitt första förslag om att kasta de InnoDB-specifika DB-filerna. Om du har en mysqldump
säkerhetskopiering, gör samma sak men återställ mysqldump
säkerhetskopiering.
Dessutom är InnoDB inte en standardlagringsmotor. Du måste gå ut ur ditt sätt att ställa in det. Standard är MyISAM. Alla nya DB som skapas i MySQL kommer att vara MyISAM. Så det här kommer att hjälpa dig. Du måste sätta på din tankemössa för att ta reda på vilka databaser som har InnoDB-lagringsmotorer inställda. Om du säger att du har 25 men bara 1 har InnoDB, enkel lösning. Men även om du har 25 databaser bör du ta för vana att göra vanlig mysqldump
säkerhetskopior. Om du hade säkerhetskopior skulle detta vara en huvudvärk men en enkel sak att lösa.
ETT ALTERNATIV:Ta bort de skadade InnoDB-grejerna och återställ från en mysqldump
säkerhetskopiering.
Det första jag skulle göra om jag var du är att säkerhetskopiera mysql
katalogen i /Library/Application Support/appsolute/MAMP PRO/db/
så du kan åtminstone ha en säkerhetskopia av de skadade filerna för säkerhets skull.
Sedan skulle jag ta bort följande filer:
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ib_logfile0
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ib_logfile1
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ibdata1
Det är InnoDB-specifika filer. Ta bort dem och försök sedan starta MAMP igen. Det borde komma upp. Men vilken InnoDB-databas som helst i MAMP kommer att vara i något "zombie"-tillstånd. Du bör ta bort dessa databaser och återskapa från backup. Eller från grunden om du kan.
ANNAT ALTERNATIV:Försök att få igång MySQL-servern igen med innodb_force_recovery
.
Nu när du direkt behöver återställa den DB:n kan du köra försök att ställa in en innodb_force_recovery
som beskrivs här.
För MAMP Pro verkar det som om du kan redigera din MySQL-konfigurationsfil enligt dessa instruktioner:
- Starta MAMP Pro.
- Stoppa MAMP Pro-servern om den körs.
- Välj Arkiv -> Redigera mall -> MySQL my.cnf
- Ett redigeringsfönster visas.
- Om ett varningsmeddelande visas, bekräfta med OK.
- Hitta avsnittet "[mysqld]"
- Lägg till denna rad under den sista raden i detta avsnitt:
innodb_force_recovery = 1
Och som MySQL-dokumentationen förklarar
, detta är strikt för att få igång databasen så att du kan göra en säkerhetskopia via mysqldump
:
Nu finns det ungefär 6 olika värden för innodb_force_recovery
men du bör egentligen bara försöka med 1
tills vidare. Om du vill prova var och en av de 6, här är en uppdelning:
Om du råkar få igång databasen och sedan kan göra en mysqldump
då grattis! Du är i klartext! De bästa nästa stegen är att
- Stoppa MySQL-databasservern
- Ta bort
innodb_force_recovery
alternativet från MySQL-konfigurationen så att databasservern kan fungera normalt. - Starta om MySQL-databasservern.
- Ta bort den skadade MySQL-databasen från servern (Radera inte dumpfilen! Det är din säkerhetskopia!)
- Skapa en ny databas som du vill återställa.
- Importera
mysqldump
säkerhetskopiera till den nya databasen.
Och du borde vara klar.