PDA

View Full Version : Backup Database


race2
16-03-2004, 08:53
Ho la necessita' di fare un Backup del database remoto in un ulteriore server remoto su un altra macchina,

chiamando in file backup.php si deve avviare il backup da un PC ad un altro PC entrambi server remoti.

che strada devo prendere ???

cionci
16-03-2004, 09:10
DBMS ?

race2
16-03-2004, 09:15
MySQL --- to ---> MySQL

cionci
16-03-2004, 09:26
Supponiamo che tu debba aggiornare la macchina 2 con i dati inseriti nella macchina 1 e che backup.php risieda sulla macchina 1 (se è sulla macchina 2 cambiano un po' le cose)...
Allora potresti eseguire mysqldump sulla macchina 1 e crearti un file di dump con dati, tabelle ed istruzioni di lock...
Fai una connessione alla macchina 2 ed esegui l'istruizone SUORCE o gli passi direttamente il file in una sola query ;)

Se i dati non sono moltissimi funziona molto bene (oppure se sai già che una grossa percentuale dei dati cambia)... Se i dati sono molti ti conviene aprire due connessioni contemporanee ad entrambe le macchine... Fare una query di selezione della tabella su entrambe le macchine, confrontare i risultati, modifichi sulla macchina 2 quelli che hanno la stessa chiave, ma contenuto diverso e aggiungi sulla macchina 2 quelli che non ci sono...
Ovviamente confronti, modifiche e aggiunte devi farle tutte via codice...

race2
16-03-2004, 10:42
mi piace di piu' la seconda.........

per velocizzare mica sai di un link che ha gia fatto questo esempio???

oppure creo da capo,

grazie ciao!

cionci
16-03-2004, 10:46
No...non ne conosco...

race2
16-03-2004, 10:56
ok grazie magari se non riesco ti posto il mio codice, grazie per ora . ciao!

race2
16-03-2004, 12:06
Originariamente inviato da cionci
Se i dati non sono moltissimi funziona molto bene (oppure se sai già che una grossa percentuale dei dati cambia)... Se i dati sono molti ti conviene aprire due connessioni contemporanee ad entrambe le macchine... Fare una query di selezione della tabella su entrambe le macchine, confrontare i risultati, modifichi sulla macchina 2 quelli che hanno la stessa chiave, ma contenuto diverso e aggiungi sulla macchina 2 quelli che non ci sono...
Ovviamente confronti, modifiche e aggiunte devi farle tutte via codice...


ho fatto questo e mi funziona!!!

come lo vedi ???


<?
$oConn=mysql_connect("127.0.0.1","admin","admin");
$oComm1=mysql_db_query("DB_1","SELECT * FROM Articoli",$oConn); // Sorgente
$oComm2=mysql_db_query("DB_2","SELECT * FROM Articoli",$oConn); // Destinazione
while($oRead1=mysql_fetch_array($oComm1)){
$oRead2=mysql_fetch_array($oComm2);
$sTitolo=$oRead1["Titolo"];
$sImg=$oRead1["Img"];
$sID=$oRead1["ID_Categoria_Articolo_1"];
$dImg=$oRead2["Img"];
if($sImg!=$dImg){
mysql_db_query("effepi_2","INSERT INTO Articoli SET Titolo='$sTitolo',Img='$sImg',ID_Categoria_Articolo_1='$sID'",$oConn);
}
}
mysql_close($oConn);
?>

cionci
17-03-2004, 09:22
Devi raddoppiare le connessioni:

<?
$oConn1=mysql_connect("127.0.0.1","admin","admin");
$oConn2=mysql_connect("192.168.0.x","admin","admin");
$oComm1=mysql_db_query("DB_1","SELECT * FROM Articoli",$oConn1); // Sorgente
$oComm2=mysql_db_query("DB_2","SELECT * FROM Articoli",$oConn2); // Destinazione
while($oRead1=mysql_fetch_array($oComm1)){

.....
}
}
mysql_close($oConn);
?>

Comunque è sbagliato il controllo...
Così se manca anche un solo dato in DB_2 li reinserisci tutti (generando molti errori)!!!
Se il dato discrimminante è il campo Img:

$oComm1=mysql_db_query("DB_1","SELECT * FROM Articoli ORDER BY Img ASC;",$oConn1); // Sorgente
$oComm2=mysql_db_query("DB_2","SELECT * FROM Articoli ORDER BY Img ASC;",$oConn2); // Destinazione
$flag = FALSE;
while($oRead1=mysql_fetch_array($oComm1))
{
if(!($oRead2=mysql_fetch_array($oComm2))
$flag = TRUE;

while($oRead1["Img"] < $oRead2["Img"] || $flag == TRUE)
{
$sTitolo=$oRead1["Titolo"];
$sID=$oRead1["ID_Categoria_Articolo_1"];
$dImg=$oRead2["Img"];
$sImg=$oRead1["Img"];

mysql_db_query("DB_2","INSERT INTO Articoli SET Titolo='$sTitolo',Img='$sImg',ID_Categoria_Articolo_1='$sID'",$oConn2);
if(!($oRead1=mysql_fetch_array($oComm1))
break;

}
if($oRead1["Img"] != $oRead2["Img"] && $flag == FALSE)
exit("Errore: nel db_1 manca un dato presente nel db_2");
}

La variabile flag serve a gestire il caso in cui i dati siano stati aggiunti in fondo a DB_1...

race2
17-03-2004, 11:56
SEI UN GRANDE !!!

mi hai dato una bella dritta,

grazie per la tua disponibilita',

funziona !

ciao a presto.

race2
17-03-2004, 12:13
Originariamente inviato da cionci
Devi raddoppiare le connessioni:

<?
$oConn1=mysql_connect("127.0.0.1","admin","admin");
$oConn2=mysql_connect("192.168.0.x","admin","admin");
$oComm1=mysql_db_query("DB_1","SELECT * FROM Articoli",$oConn1); // Sorgente
$oComm2=mysql_db_query("DB_2","SELECT * FROM Articoli",$oConn2); // Destinazione
while($oRead1=mysql_fetch_array($oComm1)){

.....
}
}
mysql_close($oConn);
?>




Ho parlato troppo presto ......!!!!!!!

Funziona fino a che le connessioni sono indirizzate tutte e due nel solito PC, altrimenti mi da errore :

PS. per questo progetto ritengo sia meglio una soluzione di questo tipo, come da codice, l'esempio che mi hai fatto lo uso immediatamente per un altro progetto .


<?
$oConn1=mysql_connect("192.168.0.1","admin","admin"); // Sorgente
$oConn2=mysql_connect("192.168.0.5","admin","admin"); // Destinazione
$oComm1=mysql_db_query("DB_1","SELECT * FROM Articoli",$oConn1); // Sorgente
$oComm2=mysql_db_query("DB_2","SELECT * FROM Articoli",$oConn2); // Destinazione

mysql_query("DELETE FROM Articoli",$oConn2); // cancello tutti gli articoli

while($oRead1=mysql_fetch_array($oComm1)){
mysql_query("INSERT INTO Articoli VALUES('".$oRead1["Titolo"]."','".$oRead1["Img"]."','".$oRead1["ID_Categoria_Articolo_1"]."')",$oConn2);
}

mysql_close($oConn1);
mysql_close($oConn2);
?>


ERRORE :

Warning: mysql_connect(): Host '192.168.0.5' is not allowed to connect to this MySQL server in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 2

Warning: mysql_connect(): Host '192.168.0.5' is not allowed to connect to this MySQL server in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 3

Warning: mysql_db_query(): supplied argument is not a valid MySQL-Link resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 4

Warning: mysql_db_query(): supplied argument is not a valid MySQL-Link resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 5

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 7

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 9

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 13

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in D:\Apache2\htdocs\www.test.it\upgrade_mysql.php on line 14

race2
17-03-2004, 12:50
Un attimo!

ho notato che non mi accetta indirizzi interni dell'HUB

prima di fare qualsiasi cosa provo con 2 PC messi in dete direttamente tra 2 LAN con cavo incrociato PC <-- to --> PC

magari dimmi solo una cosa:

lo script deve risiedere in quale PC ?

nel PC Sorgente vero ?

e richiamato dal PC Destinazione ....

cionci
17-03-2004, 16:54
Dipende da come hai creato l'utente admin... Nell'istruzione GRANT c'è la possibilità di scegliere gli ip che possono accedere per un determinato utente...

race2
18-03-2004, 14:24
OK ora funziona tutto !!

ho installato il MySQL-Front 3.0 e' molto meglio per i settaggi

Grazi mille per il tuo aiuto.