View Full Version : Backup Database
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 ???
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...
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!
ok grazie magari se non riesco ti posto il mio codice, grazie per ora . ciao!
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);
?>
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...
SEI UN GRANDE !!!
mi hai dato una bella dritta,
grazie per la tua disponibilita',
funziona !
ciao a presto.
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
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 ....
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...
OK ora funziona tutto !!
ho installato il MySQL-Front 3.0 e' molto meglio per i settaggi
Grazi mille per il tuo aiuto.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.