Chi di voi mi sa aiuare? devo spostare dei record da un database e aggiungerli in un altro database che si strova su un altro server
i record sono circa 2.000.000 quindi non posso farlo manualmente![]()
Grazie![]()
Chi di voi mi sa aiuare? devo spostare dei record da un database e aggiungerli in un altro database che si strova su un altro server
i record sono circa 2.000.000 quindi non posso farlo manualmente![]()
Grazie![]()
Innanzitutto devi aprire 2 connessioni differenti. Supponiamo che il DB di partenza si trova su SERVER_FROM e quello di arrivo su SERVER_TO
$connessione_from = mysqli_connect("SERVER_FROM", "LOG_1", "PASS_1", "NOME_DB_FROM");
$connessione_to = mysqli_connect("SERVER_TO", "LOG_2", "PASS_2", "NOME_DB_TO");
A questo punto ti leggi i dati dal DB di partenza:
$sql_read = "SELECT * FROM TABLE_FROM";
$esegui_read = mysqli_query($connessione_from, $sql_read);
Ora occorre prelevare tutti i record letti:
while ($riga_lettura = @mysqli_fetch_assoc($esegui_read))
{
//Prendi tutti i campi del record corrente
$primo_campo = $riga_lettura['NOME_PRIMO_CAMPO'];
..............
$n_simo_campo = $riga_lettura['NOME_N_SIMO_CAMPO'];
//A questo punto inserisci il record appena preso nel DB di ARRIVO:
$sql_arrivo = "INSERT INTO TABLE_ARRIVO (LISTA DEI CAMPI)
VALUES($primo_campo, ............, $n_simo_campo )";
$ins_arrivo = mysqli_query($connessione_to, $sql_arrivo);
}
//LIberiamo la memoria occupata dal result set
@mysqli_free_result($esegui_read);
//Chiudiamo la connessione con i DB
@mysqli_close($connessione_from);
@mysqli_close($connessione_to);
Spero di esserti stato di aiuto.
Ciao.
Altrimenti se hai una versione di database che supporta le storedprocedure puoi crearne una che semplicemente inserisce una riga di un database in una altra tabella.... a me sembra piu semplicae.
Qualcosa del tipo:
CREATE PROCEDURE procedura2 (eventuali parametri di input e-o output)
BEGIN
DECLARE finito INT default 0;
DECLARE a INT;
DECLARE cur1 CURSOR FOR SELECT *
FROM vecchio_database.vecchia_tabella WHERE evenutali condizioni
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
SET finito = 1;
OPEN cur1;
FETCH cur1 INTO a;
ciclo: WHILE NOT finito DO
INSERT INTO nuovo_database.nuova_tabella SELECT * FROM vecchio_database.vecchia_tabella WHERE eventuali condizioni
FETCH cur1 INTO a;
END WHILE ciclo;
END; //
DELIMITER ;
(Questa l'ho utiizzata su db Mysql)
Erebigal
grazie per il codice che "non è sopportato dal mio server " ma con alcune modifiche funziona solo che per sposare 2.500.000 tabelle mi va in timeout il server come posso risolvere la cosa
ho gia provato a rilanciare lo script piu volte ma copia sempre gli stessi record
Che CASINOOO!!![]()
![]()
![]()
Che database utilizzi? Cosa intendi quando dici che va in timeout il server?
Poi una precisazione hai 2.500.000 tabelle o record di una tabella sola?
Erebigal
Allora cerco di spiegarmi meglio.
Io ho creato un data base nel quale database c'è 1 tabella contenente 2.500.000 records(righe) contenenti 3 colonne per riga
Io devo spostare tutti i records da un database e aggiungerli in coda a un altro situato su un altro account (per capirci meglio)
il primo script che mi avere indicato mi sposta si i records da un data base a un altro anche se ho dovuto usare le istruzioni "mysql_..... e non mysqli_...... perche non mi riconosceva il comando" pero mi riesce a spostare solo i primi 133.000 records e poi mi dice che il tempo che il tepo che avevo a disposizione sul server è terminato " Fatal error: Maximum execution time of 120 seconds exceeded in D:\Inetpub\webs\....... " se poi rilancio lo script mi copia le sepre gli stessi 133.000 records mettendomeli in coda ai pecedenti. Quindi penso che dovrei cercare di fagli spostare da un dato records X a un altro records X+125.000 e cosi via pero non so come fare
vi ringrazio
![]()
![]()
L'errore di timeout non saprei come evitarlo non sono espertissimo su questione di amministrazione. Puoi pero' nella select che estrae tutti i recordi mettere un WHERE id>X AND id<X+1300000 o qualche cosa di simile.
Queste condizioni le puoi scrivere nella stored procedure che ti ho postato al posto di "eventuali condizioni" dopo il WHERE come una normalissima query
Erebigal
Se sul secondo server ke ti da il timeout hai la possibilità di mettere mani alla configurazione di php, cioé al file php.ini,
devi andare alla sezione
;;;;;;;;;;;;;;;;;;;
;Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = ........ ; Maximum execution time of each script, in seconds
sicuramente ci sarà a te 120 che sono, appunti i secondi di esecuzione massima di uno script.
Prova a mettere 10000 dovrebbero essere + ke sufficienti.
Ciao.
Ho scritto
Se sul secondo server ke ti da il timeout ..........
ho sbagliato. Volevo dire:
Se sul server web ke ti da il timeout..........
Dove si trova il Php.ini??
Grazie
Rispondimi il prima possibile![]()
![]()