sql >> Databasteknik >  >> RDS >> Mysql

Hur man ändrar MySQL 8.0-datamapp. Kan jag använda OneDrive-mappar?

Om du vill dela en databas med ett par andra användare kommer det inte att fungera att lägga datakatalogen i OneDrive.

MySQL lagrar data i filerna under datadir, det är sant. De lagras i filer som heter tabellutrymmen som har .ibd förlängning.

Men när du gör INSERT/UPDATE/DELETE-operationer lagras data tillfälligt i minnet och i transaktionsloggarna (ib_logfile* . MySQL måste göra en noggrann koordinering mellan dessa, för att spara data på ett hållbart sätt, samtidigt som man säkerställer bra prestanda. Det fungerar bra, men bara om MySQL-servern är den enda processen som skriver till filerna.

OneDrive koordinerar inte alls med MySQL. Den kommer med jämna mellanrum att söka efter filer som har ändrats sedan den senast gjorde en synkronisering. Intervallet som OneDrive kontrollerar filer är ungefär var tionde minut, och det går inte att konfigurera.

OneDrive kan välja att synkronisera filerna ett ögonblick efter att du har gjort några INFOGA/UPPDATERA/RADERA operationer, och data ändras i RAM, men har ännu inte uppdaterats i tabellutrymmesfilerna på disken.

När du väl har genomfört en ändring måste den också lagras säkert i transaktionsloggen, även om den inte uppdateras i tabellutrymmet. Men om dina vänner tar emot filerna i detta tillstånd (transaktionsloggen innehåller ändringar som inte finns i tabellutrymmet), kan de rekonstruera data från ditt RAM som de inte fick. Detta kallas InnoDB-kraschåterställning . MySQL Server gör det automatiskt om den startar upp och hittar transaktionsloggen innehåller ändringar som inte finns i tabellutrymmet. Det antar att du hade en plötslig omstart och förlorade det som fanns i RAM-minnet.

Om dina vänner försöker bara hålla sin MySQL-server igång kontinuerligt och läser en datakatalog som samtidigt uppdateras av deras OneDrive, kommer den i princip att skriva över deras filer och MySQL kommer att bli förvirrad. Den kontrollerar bara om den ska göra kraschåterställning när MySQL Server startar. Så om filerna ändras på oväntade sätt medan MySQL Server redan körs, kommer det bara att dra slutsatsen att din hårddisk har blivit skadad. Det kommer förmodligen att rapportera ett allvarligt fel och stänga av MySQL.

Om dina vänner försöker göra egna ändringar i databasen, skulle deras ändringar komma i konflikt med uppdateringarna från OneDrive. Sedan skulle deras försök att skriva över filer så småningom synkroniseras i motsatt riktning via OneDrive, och så småningom skada din databas också. Detta skulle ske utan förvarning med 10 minuters intervall, närhelst OneDrive valde att göra sin filsynkronisering.

Så jag är rädd att OneDrive inte är lösningen för att dela din databas.

Alternativ som har en chans att fungera är:

  • Att vara värd för en enda instans av MySQL Server på en webbplats som ni alla delar, och ge var och en av er en klient som kan använda databasen. En populär gratisklient är phpMyAdmin . På så sätt skulle det bara finnas en instans av MySQL Server, en datadir, även om ni var och en skulle vara samtidiga klienter som läser och skriver data. Det här är den enklaste lösningen, som med största sannolikhet fungerar.

  • Exportera data från din MySQL Server-instans med mysqldump regelbundet och lägga exportfilen på OneDrive eller skicka den till dina vänner via e-post eller på annat sätt. Då skulle de behöva importera dessa data till sin MySQL-server manuellt. Detta skulle skriva över alla ändringar de hade gjort i sin databas, men det skulle inte se ut som korruption. Om de vill skicka tillbaka ändringar till dig, kan de göra en liknande operation:exportera sin databas, lägg dumpfilen på OneDrive, sedan ska du hämta deras dumpfil och importera den till din MySQL Server-instans och skriva över alla ändringar du hade gjort lokalt sedan du senast skickade din export till dina vänner.

  • Använd ett MySQL-tillägg för synkron replikering med flera servrar, till exempel InnoDB Group Replication eller Percona XtraDB Cluster . Men det här är förmodligen för komplicerat för dig att ställa in om du är nybörjare med MySQL.




  1. Hur kan jag gruppera efter datum och tidskolumn utan att ta tid i beaktande

  2. Skapa en mer avancerad modell med status för användare, trådar och inlägg

  3. De bästa misstagen att undvika i MySQL-replikering

  4. Class.forName(com.mysql.jdbc.Driver).newInstance()