FAQ |
Kalender |
2011-01-18, 22:24 | #1 | |||
|
||||
Bara ett inlägg till!
|
Hej.
Jag kommer inom snar framtid att behöva synkronisera en del data mellan två olika webbhotellskonton. Båda är PHP med MySQL. Hur har ni löst detta / skulle löst detta? Jag funderar på en privat webservice-tjänst, men det kommer samtidigt att bli en hel del kodande och det är något jag gärna minimerar. Mycket tacksam för synpunkter / idéer! |
|||
Svara med citat |
2011-01-18, 22:37 | #2 | |||
|
||||
Flitig postare
|
Jag löste ett liknande problem idag. Det kan dock skilja sig från dig.
På server 1 har jag: En webbserver med PHP och en MySQL Server På Server 2 har jag: Exakt samma som server 1. Server 1's uppdrag är dock att hitta information från internet (den kör olika slags spindlar och botar), medan Server 2s uppdrag är att visa denna information för personer som bestämmer sig för att besöka min sida. (Alltså, Server 2 hittar inget nytt material, utan får endast material från Server 1). Jag provade på lite olika metoder för att skicka över datan från Server 1, men kom fram till att det effektivaste sättet, även om inte det mest galanta är att köra ett script på Server 1 som skriver ner alla nya rader i databasen i ett vanligt dokument. När detta är klart så anropar Server 2 dokumentet, med hjälp av file_get_contents(). Skriptet går sedan igenom dokumentet rad för rad och lägger in varje ny rad i Server 2s databas. Detta fungerar perfekt så länge det endast är en server som ska syncas med den andra. Om båda ska skicka information till varandra kan man göra en liknande lösning, men blir lite mer komplex och stökig men fungerar helt klart. |
|||
Svara med citat |
2011-01-18, 23:16 | #3 | ||
|
|||
Klarade millennium-buggen
|
captaindoe: Varför inte låta server 2 hantera databasen? så att server 1 hämtar informationen från server 2 databas?
Låt en maskin göra skitgörat |
||
Svara med citat |
2011-01-19, 10:02 | #4 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Är databaserna åtkomliga utifrån så kan ni jobba mot gemensam databas. Om de inte är åtkomliga utifrån kanske de är åtkomliga från de konton som ligger på samma hotell. |
||
Svara med citat |
2011-01-19, 11:12 | #5 | |||
|
||||
Bara ett inlägg till!
|
||||
Svara med citat |
2011-01-19, 11:14 | #6 | |||
|
||||
Bara ett inlägg till!
|
Citat:
|
|||
Svara med citat |
2011-01-19, 12:21 | #7 | ||
|
|||
Administratör
|
Låter som mk-table-sync (en del av maatkit) kan lösa problemet
__________________
eldefors.com - Personlig (teknik)-blogg |
||
Svara med citat |
2011-01-19, 12:35 | #8 | |||
|
||||
Flitig postare
|
Citat:
Det var därför jag delade upp det så att en Server gör allt skitjobb, och sedan skickar över information lätt till en annan server som användarna sedan besöker. Citat:
|
|||
Svara med citat |
2011-01-29, 02:11 | #9 | |||
|
||||
Medlem
|
Här kommer ett verkligt fall.
Lösningen är så intressant tycker jag själv att jag hoppas att detta inlägg inte tas bort bara därför att jag och mitt webbhotell är inblandat. Siten boatlife.se (BF) ligger på Fastpark (kallar det USA i fortsättningen). Webbarean är drygt 9 GB, mySQLdatabasen är drygt 600 MB. BF:s folk tycker att siten är seg men anser att den för stor för att flytta. Jag erbjuder mig att göra ett test med att flytta hela siten och ge dem möjlighet att prova innan de bestämmer sig för flytta, Siten är är forum som är ganska aktivt och kravet är att forumet ska vara stängt så kort tid som möjligt. På forumet kan man även posta filer oftast bilder, så man måste synkronisera både webbarea och mySQL. Ett nytt konto på svenska Webbotellet (SVE) läggs det upp ett vanligt webhotellkonto inkl mySQLkonto. Små tester görs först så att BF:s administratör ser att det finns ett konto och att man kan surfa dit. Eftersom man inte inte pekat om nåogt i DNSer så löser man det genom att i filen C:\Windows\System32\drivers\etc\hosts på sin egen dator skriva in raden 87.96.215.5 www.boatlife.se Så får man inte glömma att kommentera bort denna rad när man vill komma åt den verkliga boatlife.se i USA. Server SVE konfigurerar man rsync /etc/rsync.conf Kod:
log file=/var/log/rsync.log uid=0 gid=0 [boatlife_webb] path = /home.... ; här anges sökvägen dit www.boatlife.se pekar i SVE (naturligtvis) comment = Sync av BoatLife webb max verbosity = 2 read only = false list = false hosts allow = 64.13.232.48,64.13.232.49 hosts deny = * [boatlife_mySQL] path = /home/mySQLdump ; en sökväg där man kan där mysql-dump-filer ska hamna comment = Sync av BoatLife mySQL max verbosity = 2 read only = false list = false hosts allow = 64.13.232.48,64.13.232.49 hosts deny = * En katalog skapas i USA. Låt kalla den 'rSyncScript' och i denna en katalog med namnet 'dbDumpFiles' i 'rSyncScript' finns en fil 'xThis.txt' med bl a detta innehåll, dvs filer som inte får syncas. I detta fall så innehåller cinfig.php inställningar för mySQL i SVE. Kod:
forum/config.php myadmin/* scriptfil i USA som läggs i katalogen rSyncScript Detta script syncar webbarea och 159 dumpdade mySQLtabeller i USA med motsvarande i Sverige Kod:
#!/bin/sh myDb=<databasens namn i USA> dbUser=<databasanvändare> dbPass=<databaslösenord> dbHost=<databasens hostnamn> dumpDir=dbDumpFiles RSYNC=/usr/bin/rsync #---------------------------------------------------- # här syncar vi mySQLdatabasen #---------------------------------------------------- cd cd rSyncScript Tables=`mysql -e "show tables" -h $dbHost -u $dbUser $myDb --password=$dbPass` SaveIFS=$IFS IFS=$'\n' declare -a Table=($Tables) for (( i=1; i<${#Table[@]}; i++ )); do Tabell=${Table[$i]} echo "dumpar -- $Tabell"; mysqldump -h $dbHost -u $dbUser -c --quote-names --add-drop-table --default-character-set=latin1 --extended-insert=TRUE --complete-insert=TRUE $myDb ${Table[$i]} --password=$dbPass > $dumpDir/${Table[$i]}.SQL done IFS=$SaveIFS # ____ rsync på mySQL _________ mOPT="-aR --delete --timeout=600 --verbose --progress --stats" mDEST="rut.elit.net::boatlife_mySQL" cd cd rSyncScript $RSYNC $mOPT $dumpDir $mDEST echo -e "\n\n\n\n------------------ databasen KLAR ------------------------\n\n" #---------------------------------------------------- # här syncar vi webarean #---------------------------------------------------- wOPT="-aR --delete --timeout=600 --verbose --progress --stats --exclude-from=xThis.txt" wDEST="rut.elit.net::boatlife_webb" cd ../domains/boatlife.se/html #-- flytta in dit apache pekat www.boatlife.se $RSYNC $wOPT * $wDEST så kör man ./synca.sh i USA. scriptet Slut.sh på server i SVE Kod:
#!/bin/sh myDb=<databasnamn> dbUser=<databasuser> dbPass=<databaslösenord> dbHost=<databashost> dumpDir=dbDumpFiles Tables=`ls $dumpDir/* | sed -r "s/[^\/]*\/(.*)\.SQL/\1/"` SaveIFS=$IFS IFS=$'\n' declare -a Table=($Tables) IFS=$SaveIFS for (( i=0; i<${#Table[@]}; i++ )); do Tabell=${Table[$i]} echo "läser ... $Tabell"; mysql -h $dbHost -u $dbUser $myDb --password=$dbPass < $dumpDir/$Tabell.SQL done # sqlkommandona nedan är avkortade. # De ändar vissa sökarvägar som står i databasen och som inte är lika i USA och SVE # 2011-01-29 01:44:08 sql=( "update ibf_conf_setti ..." "update ibf_conf_setti ..." "update ibf_core_sys_c ..." "update ibf_core_sys_c ..." "update ibf_members se ..." ) echo -e "\n\n ------ Ändrar lite sökvägar i mySQLdatabasen ------" for (( i=0; i<${#sql[@]}; i++ )); do test=`mysql -e "${sql[$i]}" -h $dbHost -u $dbUser $myDb --password=$dbPass` echo "$test"; done # ---- härefter följer några kommandon för att ställa rättigheter och chmod på server SVE # alla filer chmod 600 # alla kataloger chmod 700 # ägare på hela webarean sätts till ftpanvändaren #kört och klart 2010-12-10 Man kan köra scripten om coh om igen. Först scriptet ./synca.sh i USA när det är klart så kör man ./Slut.sh i SVE. BF:s folk fick testa genom att konfigurera sin C:\Windows\System32\drivers\etc\hosts med raden 87.96.215.5 www.boatlife.se Slutade med att de bestämde sig för att effektuera flytten. Genomfördes så här: -- 1 -- Byt DNSer på boatlife.se till DNSer som jag hade kontroll över. Ställ in DNSerna exakt som de Fastpark DNSer med undantag att man ställer ner TTLen till 5 min och vänta ca två dygn. -- 2 -- Tekniker från BF ringer mig. Jag ställer ner TTLen ytteligare, nu till 30sek och väntar ca 5 min. -- 3 -- BFtekniker stänger forumet i USA. Nu tickar klockan !!!! -- 4 -- Jag kör ./synca.sh i USA Jag kör ./Slut.sh i Sverige. Jag pekar om boatlife.se i DNSen. -- 5 -- BFtekniker tömmer sin cache och konstatera att han surfar till SVE. BF tekniker öppnar forumet. Forumet var stängt ca 7 min !! . |
|||
Svara med citat |
Svara |
|
|