Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    11

    lavorare su due database differenti

    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

  2. #2
    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.

  3. #3
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    11
    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!!

  5. #5
    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    11
    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

  7. #7
    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

  8. #8
    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.

  9. #9
    Ho scritto
    Se sul secondo server ke ti da il timeout ..........

    ho sbagliato. Volevo dire:

    Se sul server web ke ti da il timeout..........

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    11
    Dove si trova il Php.ini??

    Grazie

    Rispondimi il prima possibile

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.