[mysql] intranet db & internet db synchroniseren

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Ik heb wat topics gevonden na mijn search 'mysql & synchroniseren' maar toch niet helemaal wat ik zocht dus ik ga het toch even in een nieuw topic proberen.

Situatie:
Ik heb een offline intranet server met daarop Apache/PHP5/MySQL.. er draait daarop een kleine database (wordt zeker niet groter dan 2MB) die frequent wordt geupdate.
De intranetserver is niet geschikt om direct op internet te serven vanwege veiligheidsredenen en bandbreedte.

Er is een online account op een domein waar beschikking is over PHP+MySQL. Handmatig kun je natuurlijk simpelweg de database van de intranetserver exporteren met PHPMyAdmin in een .sql bestand, deze uploaden naar het domein en vervolgens online laten benaderen door PHP scripts.

Om dit nu dagelijks handmatig te blijven doen is een beetje omslachtig, met andere woorden, is er een manier om deze twee databases dmv scripting automatisch te laten synchronseren op enige wijze :? (delay maakt niet echt uit, binnen 24 uur is goed genoeg)

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Middels een cronjob (Linux/UNIX) of een sheduled task (Windows) een script uitvoeren dat de databases met elkaar vergelijkt en de online database update?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Ah vergat ik nog even te zeggen, de intranet server draait Windows2003 (dus dan heb je 't over scheduled task idd)..
dan rest nog de vraag hoe je de export en de import van db's kunt automatiseren :)

[ Voor 30% gewijzigd door ScuL op 04-06-2006 16:01 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20-02 19:23
Kom je dan niet in de hoek van Replication ? Waarbij je een master database hebt een een aantal slaves, waarbij de slaves aan de hand van logfiles van de master hun eigen database gaan updaten. Heb er zelf nog nooit mee gewerkt, en weet ook niet op het in jouw geval ivm de infrastructuur wel gaat werken.

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Sybr_E-N schreef op zondag 04 juni 2006 @ 16:05:
Kom je dan niet in de hoek van Replication ? Waarbij je een master database hebt een een aantal slaves, waarbij de slaves aan de hand van logfiles van de master hun eigen database gaan updaten. Heb er zelf nog nooit mee gewerkt, en weet ook niet op het in jouw geval ivm de infrastructuur wel gaat werken.
Well replication lijkt me iets wat je in het geval van grootschalige zakelijke projecten gaat gebruiken, de db in dit geval is niet zo schokkend groot dat het niet te behapstukken is :)

Ik ben al een stapje verder nu met het eerste stuk,
ik maak een scheduled batch bestand met daarin het dump-commando ( mysqldump -u user -ppassword dbtable > bestandsnaam.sql ) .... dat werkt.... nu nog een FTP-commando.

En dan denk ik dat ik vanaf dat punt een cronjob op de linux-hosted webserver moet gaan bouwen om de oude tables te droppen, vervolgens die .sql periodiek in te lezen en voila....
(trouwens is het niet mogelijk om alleen nieuwe records te dumpen (de oude blijven toch in tact...))

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:09

Janoz

Moderator Devschuur®

!litemod

-ScuL- schreef op zondag 04 juni 2006 @ 16:12:
[...]


Well replication lijkt me iets wat je in het geval van grootschalige zakelijke projecten gaat gebruiken, de db in dit geval is niet zo schokkend groot dat het niet te behapstukken is :)
Het wel of niet replication gebruiken heeft weinig met de grootte van de db of de gebruiker te maken. Waar je naar moet kijken is het gebruik. Wat ik nu zie is dat het enkel eenrichtings verkeer is. De online versie wordt alleen read only gebruikt en daar worden geen veranderingen gedaan. In dat geval kun je inderdaad een export van de offline importeren in de online versie. Dat is nog een behoorlijk te behappen probleem. Worden er online echter ook wijzigingen doorgevoerd, dan zou ik alvast het import export tooltje overboord gaan gooien en monsterboard af gaan zoeken naar een dba-er.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Janoz schreef op zondag 04 juni 2006 @ 16:21:
[...]

Het wel of niet replication gebruiken heeft weinig met de grootte van de db of de gebruiker te maken. Waar je naar moet kijken is het gebruik. Wat ik nu zie is dat het enkel eenrichtings verkeer is. De online versie wordt alleen read only gebruikt en daar worden geen veranderingen gedaan. In dat geval kun je inderdaad een export van de offline importeren in de online versie. Dat is nog een behoorlijk te behappen probleem. Worden er online echter ook wijzigingen doorgevoerd, dan zou ik alvast het import export tooltje overboord gaan gooien en monsterboard af gaan zoeken naar een dba-er.
Nope de online-functie is puur voor het raadplegen van info's die op het intranet gegenereerd worden Dus in principe kan ik met mijn one-way oplossing het vraagstuk prima behappen :)

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Ok dit is natuurlijk super handig voor naslag voor anderen dus ik zal mijn oplossing maar even posten:

* in de mysql/bin directory heb ik een batch-bestand gemaakt (kan natuurlijk ook ergens anders maar dan moet je de paden even veranderen)

script.bat
code:
1
2
3
4
5
6
7
8
@echo off
cls
c:
cd\
cd pad\naar\mysql\bin
mysqldump -u DBLOGIN -pDBPSWD DBTABLE > DBFILE.sql
ftp -s:FTPSCRIPT.scr
wget --http-user=HTTPUSER --http-passwd=HTTPPW -O LOG.txt http://www.scriptlocatie.com/uitvoer/importsql.php


Eerst gaat ie dus naar het goede pad, vervolgens doet ie een dump van de dbtable naar het bestand dbfile.sql.
Vervolgens start hij het Windows FTP commando en runt het script ftpscript.scr.

De inhoud daarvan is:

ftpscript.scr
code:
1
2
3
4
5
6
open ftp.scriptlocatie.com
ftp-user
ftp-pw
cd uitvoer
put dbfile.sql
quit


Uiteindelijk doet ie een wget om het database-import-script te starten met wget voor windows (dit heb ik zo gedaan omdat ik de cronjobs niet aan de praat kreeg op m'n webhosting server.
't wget commando krijgt ook nog parameters mee voor HTTP-user en HTTP-password zodat niet iedere sjaak het script kan runnen (directory is beveiligd met .htaccess).

Het php-script om de database te importeren ziet er als volgt uit:

importsql.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$filename = trim("/home/domains/serverlocatie.com/uitvoer/dbfile.sql");

$file = fopen($filename, 'r');
    $data = array();
    $i = 0;
    while($line = fgets($file))
    {
        if(ereg('^--', $line))
        {
            if($data[$i] != '')
            {
            $i++;
            $data[$i] = '';
            }
        }
        else
        {
        $data[$i] .= $line;
        }
    }

$host = trim("localhost");
$user = trim("db_user");
$pass = trim("db_pw");
$db = trim("db_table");

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($db, $conn);

    $i = 0;
    while(isset($data[$i]))
    {
    $data[$i] = explode(';', $data[$i]);
        
        $j = 0;
        while(isset($data[$i][$j]))
        {
            if(trim($data[$i][$j]) != '')
            {
            //echo "++ Running *************\n".$data[$i][$j]."\n++ *******************\n";
            mysql_query($data[$i][$j].';');
            echo "\n\n".mysql_error()."\n\n\n";
            }
            else
            {
            //echo "++ Skipping empty query\n";
            }
        $j++;
        }
    $i++;
    }
echo "Import succesful!\n";
echo chr(13);
?>


En uiteindelijk is er nog een output in log.txt.
Je kunt importsql.php natuurlijk aanpassen om meer gegevens in je log te krijgen.

[ Voor 22% gewijzigd door ScuL op 04-06-2006 18:02 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 12:01

orf

Kijk wel uit met ';' in je database. Als je dat in een veld hebt staan loopt je scriptje fout.
:)

  • ekoopman
  • Registratie: April 2003
  • Laatst online: 19-02 19:37
als ik me niet vergis kun je dat lange php scriptje vervangen door
code:
1
mysql -u ikke -pgeheim < mysqlqueries.sql

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 09:49
Kroxigor schreef op maandag 05 juni 2006 @ 10:30:
als ik me niet vergis kun je dat lange php scriptje vervangen door
code:
1
mysql -u ikke -pgeheim < mysqlqueries.sql
Dat kan niet want ik heb geen shell xs op die server :)

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 20-02 23:48

JaQ

Zit je al op mysql 5.0? Dan zou je ook naar federated storage engine kunnen kijken.Het werkt een beetje zoals een database link in Oracle, maar kan voor een taak als deze prima voldoen.

Egoist: A person of low taste, more interested in themselves than in me


Verwijderd

-ScuL- schreef op maandag 05 juni 2006 @ 14:15:
[...]

Dat kan niet want ik heb geen shell xs op die server :)
Kun je dat commando niet via php uitvoeren?

PHP:
1
2
3
<?php
    exec('mysql -p bla bla bla');
?>
Pagina: 1