Jag använde min väns mac tillfälligt tills min egen fick service. Så tidigare i veckan tog jag bort mitt användarkonto på hans mac som hade en massa databaser som jag behövde. Jag hade säkerhetskopierat det mesta av användardata innan jag tog bort det kontot men snart insåg jag att jag missade att säkerhetskopiera databasen. Det lyckliga och möjligen anledningen till detta är att databasdatakatalogen i allmänhet finns utanför användarkontot. I den här artikeln kommer jag att nämna punktpunkter om hur jag fick tillbaka dessa DB-data med hjälp av mina vänners användarkonto (eller så kan du till och med skapa ett nytt och göra samma steg).
- Se till att mariadb fortfarande är installerat genom att köra
brew install mariadb
.Jag upptäckte att den var tillgänglig men homebrew hade inte tillgång till installationskatalogen eftersom den skapades från ett annat användarkonto. Så först återställer vi detta genom att köra:
sudo chown -R $(whoami) /usr/local/bin
Om kommandot gav en feldump som visar vilka mappar det inte har åtkomst till, kan du köra samma kommando för var och en av mapparna. Jag körde också brew upgrade mariadb
för att hålla dig uppdaterad med den nyare mariadb-installationen (även om jag inte skulle rekommendera att köra detta i allmänhet förrän du har säkerhetskopierat databaserna).
- Närnäst måste du ta reda på vilken datakatalog mariadb använder och köra chown på det också. Detta kan göras genom att köra:
brew services list
Detta kommer att ge en lista över de tjänster som körs och deras körkonfigurationer. Öppna bara mariadb-uppgifternas konfiguration och se parametern --datadir
i XML--ska vara inuti argumentblocket. I mitt fall var detta --datadir=/usr/local/var/mysql
. Kopiera nu den sökvägen och kör:
sudo chown -R $(whoami) /usr/local/var/mysql
Vid det här laget undrar du kanske varför inte helt enkelt kopiera datakatalogen till sin egen mac och sedan öppna databasen direkt? Problemet här är att mappen bara har .ibd och .frm filer som verkligen inte kan importeras av mySQL. Så jag måste köra mysql-servern igen med denna datadir och sedan exportera den.
- Närnäst var jag tvungen att stoppa alla pågående mysql-server för att säkerställa att jag kan starta mysql smidigt. Jag gör detta genom att köra:
brew services stop mariadb
ps aux | grep mysql
Det sista kommandot är att kontrollera att det inte finns några andra mysql-instanser som körs. Om kommandot returnerar några processer som kör mysql, måste de dödas med kommandot kill -9 eller så öppnar du Activity Monitor, använd sök för att filtrera ner mysql och tvinga döda dem manuellt.
Nu kan den färska mysql-instansen startas genom att använda:
brew services start mariadb
Alternativt kan du till och med anropa programmet som finns i bin-mappen som nämns i XML-filen för homebrew-tjänstens konfiguration, dvs. ta den första programsträngen och ersätta mysqld_safe
till mysql.server start
och kör kommandot. I mitt fall gjorde jag detta genom att köra:
/usr/local/opt/mariadb/bin/mysql.server start
Det kommer att ge FRAMGÅNG! om tjänsten startar framgångsrikt. Annars måste du kontrollera felloggarna (var i /usr/local/var/mysql
mapp för mig) för att ta reda på vad som gick fel och lösa det genom att googla.
Och det är ganska mycket det, du kan nu säkerhetskopiera databaserna som du normalt skulle göra. Jag gör detta genom att köra:
mysql -u root -p<password>
show databases
Och detta skulle ge en lista över alla databaser. Och kör sedan backupkommandot för varje databas du vill säkerhetskopiera som:
mysqldump -u root -p<password> dbname > dbname.sql
Och det är ungefär så det görs. Och jag släppte databaserna till min egen bärbara dator och var klar.