Kom ihåg mig?
Home Menu

Menu


Synka data - MySQL / Webservices

Ämnesverktyg Visningsalternativ
Oläst 2011-01-18, 22:24 #1
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Standard Synka data - MySQL / Webservices

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!
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-18, 22:37 #2
captaindoes avatar
captaindoe captaindoe är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2010
Inlägg: 431
captaindoe captaindoe är inte uppkopplad
Flitig postare
captaindoes avatar
 
Reg.datum: Dec 2010
Inlägg: 431
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.
captaindoe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-18, 23:16 #3
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
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
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-19, 10:02 #4
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Ursprungligen postat av coredev Visa inlägg
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!

Ä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.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-19, 11:12 #5
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Citat:
Ursprungligen postat av Magnus_A Visa inlägg
Ä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.
Nej och nej igen - Tyvärr var det inte så enkelt idag.
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-19, 11:14 #6
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Citat:
Ursprungligen postat av captaindoe Visa inlägg
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.
Tjena... Detta, måste jag säga, var en riktigt elegant & agil lösning. Skall fundera på om den är applicerbar i mitt scenario. Tack :-)
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-19, 12:21 #7
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Låter som mk-table-sync (en del av maatkit) kan lösa problemet
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-19, 12:35 #8
captaindoes avatar
captaindoe captaindoe är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2010
Inlägg: 431
captaindoe captaindoe är inte uppkopplad
Flitig postare
captaindoes avatar
 
Reg.datum: Dec 2010
Inlägg: 431
Citat:
Ursprungligen postat av Jonas Visa inlägg
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
Jag hade det så förut, men spindlarna som hämtar information från webben kräver otroligt mycket resurser (CPU flyger i luften), så blir hemsidan därför otroligt seg om användarna ska få deras information från samma databas.

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:
Ursprungligen postat av coredev
Tjena... Detta, måste jag säga, var en riktigt elegant & agil lösning. Skall fundera på om den är applicerbar i mitt scenario. Tack :-)
Det fungerar fin fint för mig, så om det är applicerbart för ditt scenario så rekommenderar jag det starkt.
captaindoe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-29, 02:11 #9
aelanders avatar
aelander aelander är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 146
aelander aelander är inte uppkopplad
Medlem
aelanders avatar
 
Reg.datum: Dec 2004
Inlägg: 146
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 = *
hosts allow är IPadresser på Fastpark i USA som man ska kunna ansluta från.



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 !!




.
aelander är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:06.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017