sql >> Database >  >> RDS >> Mysql

Hoe de MySQL 8.0-gegevensmap te wijzigen. Kan ik OneDrive-mappen gebruiken?

Als je een database wilt delen met een paar andere gebruikers, zal het niet werken om de datadir in OneDrive te zetten.

MySQL slaat data op in de bestanden onder de datadir, dat klopt. Ze worden opgeslagen in bestanden met de naam tablespaces die de .ibd . hebben extensie.

Maar terwijl u INSERT/UPDATE/DELETE-bewerkingen uitvoert, worden gegevens tijdelijk opgeslagen in het geheugen en in de transactielogboeken (ib_logfile* . MySQL moet een delicate coördinatie tussen deze doen om gegevens op een duurzame manier op te slaan en tegelijkertijd goede prestaties te garanderen. Het werkt goed, maar alleen als de MySQL-server het enige proces is dat naar de bestanden schrijft.

OneDrive coördineert helemaal niet met MySQL. Het zal periodiek controleren op bestanden die zijn gewijzigd sinds de laatste synchronisatie. Het interval dat OneDrive bestanden controleert is ongeveer elke 10 minuten, en dit is niet configureerbaar.

OneDrive kan ervoor kiezen om de bestanden te synchroniseren op een moment nadat u enkele INSERT/UPDATE/DELETE-bewerkingen heeft uitgevoerd en de gegevens zijn gewijzigd in RAM, maar nog niet zijn bijgewerkt in de tabelruimtebestanden op schijf.

Nadat u een wijziging heeft doorgevoerd, moet deze ook veilig worden opgeslagen in het transactielogboek, zelfs als deze niet is bijgewerkt in de tabelruimte. Maar als je vrienden de bestanden in deze staat ontvangen (het transactielogboek bevat wijzigingen die niet in de tabelruimte aanwezig zijn), kunnen ze de gegevens uit je RAM reconstrueren die ze niet hebben gekregen. Dit heet InnoDB-crashherstel . MySQL Server doet dit automatisch als het opstart en ontdekt dat het transactielogboek wijzigingen bevat die niet in de tabelruimte staan. Het gaat ervan uit dat je plotseling opnieuw bent opgestart en bent kwijtgeraakt wat er in het RAM-geheugen zat.

Als je vrienden proberen hun MySQL-server gewoon continu aan de gang te houden, terwijl ze een datadir lezen die tegelijkertijd wordt bijgewerkt door hun ene OneDrive, overschrijft het in feite hun bestanden en raakt MySQL in de war. Het controleert alleen of het crashherstel moet uitvoeren als MySQL Server start. Dus als de bestanden op onverwachte manieren veranderen terwijl MySQL Server al draait, zal het gewoon concluderen dat je harde schijf beschadigd is geraakt. Het zal waarschijnlijk een fatale fout rapporteren en MySQL afsluiten.

Ook als uw vrienden zelf wijzigingen in de database proberen aan te brengen, zouden hun wijzigingen in strijd zijn met de updates van OneDrive. Dan zouden hun pogingen om bestanden te overschrijven uiteindelijk via OneDrive in de tegenovergestelde richting worden gesynchroniseerd en uiteindelijk ook je database beschadigen. Dit zou zonder waarschuwing gebeuren met tussenpozen van 10 minuten, telkens wanneer OneDrive ervoor koos om zijn bestandssynchronisatie uit te voeren.

Dus ik ben bang dat OneDrive niet de oplossing is om je database te delen.

Alternatieven die wel kans van slagen hebben zijn:

  • Een enkele instantie van MySQL Server hosten op een website die jullie allemaal delen, en jullie allemaal een client geven die de database kan gebruiken. Een populaire gratis client is phpMyAdmin . Op die manier zou er slechts één exemplaar van MySQL Server zijn, één datadir, ook al zouden jullie elk gelijktijdige clients zijn die gegevens lezen en schrijven. Dit is de eenvoudigste oplossing, die waarschijnlijk werkt.

  • De gegevens exporteren van uw MySQL Server-instantie met behulp van mysqldump periodiek, en het exportbestand op OneDrive te plaatsen of het naar uw vrienden te verzenden via e-mail of op een andere manier. Dan zouden ze die gegevens handmatig naar hun MySQL-server moeten importeren. Dit zou alle wijzigingen die ze in hun database hadden aangebracht overschrijven, maar het zou niet als corruptie verschijnen. Als ze wijzigingen naar u willen terugsturen, kunnen ze een vergelijkbare bewerking uitvoeren:hun database exporteren, het dumpbestand op OneDrive plaatsen, dan zou u hun dumpbestand krijgen en het importeren in uw MySQL Server-instantie, waarbij alle wijzigingen die u had overschreven lokaal gedaan sinds de laatste keer dat je je export naar je vrienden hebt gestuurd.

  • Gebruik een MySQL-add-on voor synchrone replicatie op meerdere servers, zoals InnoDB Groepsreplicatie of Percona XtraDB-cluster . Maar dit is waarschijnlijk te ingewikkeld voor u om in te stellen als u een beginner bent met MySQL.




  1. Hoe haal ik de maand en het jaar uit een MySQL-datum en vergelijk ik ze?

  2. 3 gebieden die baat zullen hebben bij het gebruik van een SQL Server Performance Monitoring Tool

  3. Oracle:functiegebaseerde index selectieve uniciteit

  4. Row_to_json() gebruiken met geneste joins