Ik ben op zoek naar een oplossing waar ik niet echt goed weet hoe eraan te beginnen.
Ik hoop alleszinds dat ik het duidelijk genoeg kan uitleggen.
Ik heb een formulier gemaakt dat ik meermaals per dag invul en opsla in een MySQL database. Diezelfde database (dezelfde structuur) heb ik op nog 2 andere plaatsen (dus 1 op mijn laptop, 1 op mijn hosting en 1 op mijn PC thuis).
Het nut daarvan ga ik jullie besparen.
Dus... Heel de dag door werk ik op mijn laptop op verplaatsing. Alles wat in die database terechtkomt moet in die 2 andere databases ook komen als ik 's avonds thuis kom (dmv een script?).
De info die al in de database aanwezig is mag in geen enkel geval overschreven worden.
Ik denk dat de vraag al duidelijk word: Hoe zorg ik dat in de 3 databases exact dezelfde info staat (update, insert,...) ?
De info die al in de database aanwezig is mag in geen enkel geval overschreven worden.
Maar, het lijkt mij geen probleem als na afloop een overschreven database dezelfde+nieuwe informatie bevat?
Dus, samenvattend:
- overdag, mutaties in database-laptop
- 's-avonds, geen mutaties meer, sync met hosting en met pc thuis
Ik neem aan dat je sowieso geregeld backups maakt, als deze informatie zo belangrijk is? Vinden er mutaties plaats op alle of sommige tabellen van de database? Of is dat van tevoren moeilijk in te schatten en kopieer je gemakshalve alles?
Het makkelijkste lijkt mij één database, die op afstand bereikbaar is; is dit een mogelijkheid? staat je laptop (continu) in verbinding met het internet? is de database vanaf andere locaties/hosts bereikbaar? Stel bijvoorbeeld dat je de (enige) database op je hosting-ruimte zet, kun je deze dan vanaf je laptop/desktop benaderen?
voordelen: één bron, geen synchronisatie-overhead
nadelen/voorwaarden: database moet extern bereikbaar zijn/laptop moet over netwerk beschikken
Anders: maak aan het eind van de dag een databasedump van je laptop-database (er van uitgaande dat deze database "leading" is, d.w.z. te allen tijde uptodate is. En importeer deze op je desktop / hostingruimte. Ik zou niet aan de slag gaan met allerhande importscripts (met uitzondering van een geautomatiseerde variant zoals mysqldump) want dat is nou eenmaal foutgevoelig.
Ook zou je kunnen overwegen om desktop/hosting uit je rijtje van te synchroniseren systemen te halen, scheelt waarschijnlijk een hoop tijd?
NB: met mysqldump kun je ook specifieke tabellen dumpen, hoeft niet per se de hele database te zijn.
Als je meer info kunt geven waarom je per se 3 verschillende systemen synchroon te houden, kunnen we waarschijnlijk ook een specifieker antwoord geven.
NB2: Er zijn ook zaken als master/slave opstellingen (database replicatie of hoe het ook mag heten) en ook zoiets als virtuele tabellen, maar dat lijken mij allemaal varianten die niets toevoegen en/of complexer zijn. Als je per se 3 databases synchroon wilt houden lijken mij databasedumps het makkelijkste?
Oh idee, wat je wellicht ook nog zou kunnen doen is een webservice schrijven zodat als je iets insert/update op je laptop, dat dit dan ook meteen wordt bijgewerkt op je hosting/desktop, maar dan:
- moet je laptop over een netwerkverbinding beschikken
- je desktop vanaf het internet bereikbaar zijn
en dan is er altijd nog de kans dat je hosting/desktop down zijn om wat voor reden...
dan (als al aan deze voorwaarden voldaan is) lijkt mij één centrale database een stuk eenvoudiger...
Wat je ook nog zou kunnen doen (maar wat ik zou afraden) is het "verschil" op een dag bijhouden en dit "verschil" dan wegschrijven naar desktop/host. Maar dit is erg foutgevoelig en als er een keer iets misgaat/je dit vergeet of whatever dan ben je de klos.
Wat je ook zou kunnen doen is inderdaad een sync-script maken. Als je dan een veld toevoegt aan de database "modified-date", dan kun je in de 3 databases gaan kijken, welke gegevens in alle databases geüpdatet zijn en deze updaten/toevoegen waar nodig.
Als je de tabellen niet wilt uitbreiden met 'modified-date', dan kun je eventueel een aparte sync-tabel maken, waarin je de tabel & datum & column & id zet en zo kun je dit rijtje afgaan en updaten.
Maar alles hangt nogal veel af van de data, hoe gedraagt deze zich, hoeveel records/tabellen zijn er? Als je een dump maakt is het dan een monster van honderden megabytes of enkele (tientallen)?
Hoeveel data verandert er, en zijn dit voornamelijk updates of inserts? En op hoeveel tabellen zijn deze inserts/updates van toepassing? Zou je hierin nog zaken kunnen aanpassen zodat het synchroniseerproces eenvoudiger/triviaal wordt?
Niet voor het een of ander, maar ik zou JUIST (zoals FanghorN aanhaalde) kiezen voor een host ipv alle andere omwegen met lokale meuk etc..
Zover ik jou ken heb je wel een redelijk goede host, die zorgt voor backups etc, dus enige wat jou rest, is elke insert/update/etc te doen via je host en je bekijkt gewoon alles online.
Volledig online was mijn eerste keuze... Maar ik wil er ook geen uren werk in steken om al die gegevens op te slaan en volgens mij is het beveiligen van die formulieren met htaccess niet bepaald de beste manier.
De info die ik opsla mag in geen geval op straat belanden, dus er is wel enige vorm van achterdocht om dit online te doen.
Vandaar dus de keuze om lokaal te werken... Tenzij iemand mij een handige oplossing aanreikt...
Mijn formulier is klaar (en al gebruikt dus hij werkt ook zoals het hoort.) en een voorontwerp om de data uit de database op te vragen...
De info die ik opsla mag in geen geval op straat belanden, dus er is wel enige vorm van achterdocht om dit online te doen.
Deed je dat al niet dan?
Weet niet zeker of het bovenstaande van vinTage gaat werken (denk aan lazy evaluation), en dubbele ontkenningen lezen zo lastig .
Anyway, hoe exporteer jij een database ? Dit is één tekstregel die je in een .bat-file zou kunnen zetten (mysqldump --opt -u <user> -p <brondatabase> > export.sql of iets dergelijks), dan wordt het één (dubbel)klik op de (muis)knop. Het importeren idem dito (mysql -u <user> -p <doeldatabase> < export.sql). En tussendoor zet je dit op een zipdisk of (lokaal) gedeelde schijf ofzo.
En als het echt super veilig moet zijn gebruik je https op je hosting, dan is het dataverkeer over de kabel/door de lucht ook versleuteld. En dan dus een super eenvoudig scriptje voor het afschermen van je data en klaar. Eén bron die vanaf meerdere plaatsen leesbaar is lijkt mij nog steeds het makkelijkste.
Kun je misschien aangeven wat je precies voor data opslaat? Wat voor nut heeft deze applicatie?
Het klinkt namelijk meer alsof je gewoon de verkeerde oplossing hebt voor je probleem. Je zit met een database toch al snel met problemen in het kader van primary keys en relaties die niet overeenkomen tussen de twee databases.
Waar je eigenlijk naar op zoek bent is een soort van SVN/GIT voor een database... maar bij elke database heb je toch vaak echt een master en een slave, terwijl jij beide tegelijk wilt. Wanneer je dat wilt bewerkstelligen dan zijn de andere oplossingen (zoals via webservices werken of één centrale database) misschien toch een betere oplossing.
Dit is info over mijn werk en klanten... Dus die info over het internet opslaan vind ik een beetje riskant... Als die info op straat beland, kost mij dat mijn kop op mijn werk...
Vandaar dat ik dus lokaal probeer te werken.
De data in de databases moeten niet in real-time gelijk blijven, deze worden gelijkgetrokken als ik thuiskom van mijn werk.
Ik en beveiliging in PHP liggen nog niet op 1 lijn... dat is nog een knelpuntje voor mij... vandaar de afkeer voor die info online te gooien...
Had ik al voorgesteld (lees ff terug ). Je kunt je applicatie wel helemaal dichttimmeren, maar als de lijn waar alles (onversleuteld) overheen gaat niet veilig is dan schiet je je doel toch een beetje voorbij .
Voorzichtigheid kan natuurlijk nooit kwaad, maar je kunt overdrijven . Administratieve informatie online is toch redelijk commonplace vandaag de dag? En met redelijk eenvoudige middelen (https, regelt je hosting, iets van een loginscript, kan supersimpel) is dit best te beveiligen. Er is natuurlijk wel een "spanningsveld": hoeveel mag het mij kosten om iets te beveiligen / gebruikersgemak vs security etc.. Het veiligste is wellicht nog alles uitgeprint en wel in een brandvaste kluis stoppen, maar dit zijn nou niet direct de lanceercodes van intercontinentale nucleaire kruisrakketten wel? . Zoek dus naar een oplossing in het midden met een bekend / acceptabel risico. Wellicht verzorgt je hosting ook advies / applicatieontwikkeling van dit soort systeempjes?
En houd het simpel. Als je iets niet kunt overzien (is niet hetzelfde als volledig kunnen doorgronden/begrijpen), niet aan beginnen.
Ik weet niet of ik het helemaal goed begrijp maar de database op de desktop wordt niet afzonderlijk bewerkt?
In dat geval zou je de gegevens ook in een lokale .db bestand kunnen opslaan en deze thuis via een sync folder (Offline beschikbare netwerkfolder) kunnen delen met de desktop waarbij beide programma's / scripts dezelde database gebruiken
Of deze .db vanaf een usb apparaat benaderen vanaf desktop en laptop
Ik zelf heb webserver op usb stick draaien voor bepaalde dingen en voor de paar records die jij hebt is dat opzich goed te doen.
Ik zeg niet dat dit de beste oplossingen zijn maar het zijn mogelijkheden
@stijn, ja hij stond bovenaan de lijst met 'actieve' topics, heb niet direct naar de datum gekeken, naja sorry en zal dan volgende keer extra goed opletten wat daadwerkelijk actueel is hier