PREFAZIONE: Suona male, ma assicurati di leggere tutto in questa risposta prima di agire. Non puoi peggiorare le cose prendendoti il tuo tempo. Leggi ogni passaggio e spero che questo sia abbastanza chiaro da consentirti di seguire e ripristinare il tuo server di database MySQL in MAMP Pro.
Quindi, sembra che i tuoi database InnoDB si siano arrestati in modo anomalo. Non l'app stessa. La chiave è qui nel registro:
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.
E sembra che tu stia usando MAMP PRO qui:
/Library/Application Support/appsolute/MAMP PRO/db/mysql
Quindi la domanda è:hai un backup dei database MAMP Pro? O tramite mysqldump
o qualcos'altro? Hai altri database InnoDB nella tua installazione MAMP?
Inoltre, dici che sei stato in grado di eseguire mysqldump
, ma in realtà non è possibile che il database si sia arrestato in modo anomalo. Quindi presumo quando hai eseguito mysqldump
quella era un'altra installazione separata di MySQL sul tuo sistema. I binari MySQL come mysqldump
in MAMP o MAMP Pro non sono gli stessi di mysqldump
a livello di sistema . Sono due installazioni diverse al 100%. Puoi controllare quale mysqldump
viene utilizzato digitando questo comando:
which mysqldump
Per vedere il percorso completo di ciò che ritieni di utilizzare. L'installazione MAMP di mysqldump
—e altri binari correlati—si trova qui:
/Applications/MAMP/Library/bin/
E per eseguirlo direttamente senza modificare il tuo $PATH
il valore (tutta un'altra cosa) è eseguirlo in questo modo:
/Applications/MAMP/Library/bin/mysqldump
LEGGERE ATTENTAMENTE: Tieni presente che il consiglio che ti sto dando di seguito è che sto presentando tutti i modi in cui affronterei una situazione come questa. Se il database InnoDB non è importante, esegui il mio primo suggerimento di cestinare i file DB specifici di InnoDB. Se hai un mysqldump
backup, fai la stessa cosa ma ripristina mysqldump
backup.
Inoltre, InnoDB non un motore di archiviazione predefinito. Devi fare di tutto per impostarlo. L'impostazione predefinita è MyISAM. Qualsiasi nuovo DB creato in MySQL sarà MyISAM. Quindi questo ti aiuterà. Devi mettere il tuo limite di pensiero per capire quali database hanno i motori di archiviazione InnoDB impostati. Se dici di averne 25 ma solo 1 ha InnoDB, soluzione facile. Ma anche se hai 25 database, dovresti prendere l'abitudine di creare regolarmente mysqldump
backup. Se avessi i backup, questo sarebbe un mal di testa ma una cosa semplice da risolvere.
UN'OPZIONE:elimina il materiale InnoDB danneggiato e recupera da un mysqldump
backup.
La prima cosa che farei se fossi in te è eseguire il backup di mysql
directory in /Library/Application Support/appsolute/MAMP PRO/db/
così puoi almeno avere un backup dei file danneggiati per ogni evenienza.
Quindi eliminerei i seguenti file:
/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
Questi sono file specifici di InnoDB. Eliminali e quindi prova ad avviare nuovamente MAMP. Dovrebbe venire fuori. Ma qualsiasi database InnoDB in MAMP sarà in uno stato "zombi". Dovresti eliminare quei database e ricrearli dal backup. O da zero se puoi.
UN'ALTRA OPZIONE:prova a riavviare il server MySQL con innodb_force_recovery
.
Ora nella remota possibilità che tu debba recuperare quel DB, puoi eseguire un tentativo di impostare un innodb_force_recovery
come descritto qui.
Per MAMP Pro sembra che tu possa modificare il tuo file di configurazione MySQL secondo queste istruzioni:
- Avvia MAMP Pro.
- Arresta il server MAMP Pro se è in esecuzione.
- Seleziona File -> Modifica modello -> MySQL my.cnf
- Viene visualizzata una finestra dell'editor.
- Se viene visualizzato un messaggio di avviso, confermare con OK.
- Trova la sezione "[mysqld]"
- Sotto l'ultima riga di questa sezione aggiungi questa riga:
innodb_force_recovery = 1
E come spiega la documentazione MySQL
, questo serve esclusivamente per far funzionare il database in modo da poter eseguire un backup tramite mysqldump
:
Ora ci sono circa 6 valori diversi per innodb_force_recovery
ma dovresti provare solo con 1
per adesso. Se vuoi provare ciascuno dei 6, ecco una ripartizione:
Se ti capita di far funzionare il database e quindi puoi fare un mysqldump
allora complimenti! Sei in chiaro! Il miglior passo successivo è
- Arresta il server del database MySQL
- Rimuovi
innodb_force_recovery
opzione dalla configurazione di MySQL in modo che il server del database possa funzionare normalmente. - Riavvia il server del database MySQL.
- Elimina il database MySQL danneggiato dal server (non eliminare il file dump! Questo è il tuo backup!)
- Crea un nuovo database che desideri recuperare.
- Importa il
mysqldump
backup nel nuovo database.
E dovresti aver finito.