Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969

    [micro pillolina] dump e import veloce di db di grandi dimensioni con php e mysqldump

    Pubblico questo piccolo script con la speranza che, con l'aiuto di qualcuno, si possa migliorare e rendere flessibile a tutti sistemi.
    Lo script è nato per la necessità di importare database di grandi dimensioni in modo veloce, cosa che con phpMyAdmin non è possibile.

    BACKUP DATABASE USANDO PHP E MYSQLDUMP
    mysldump è il programma di mysql per il backup di uno o più database. Usato da shell è il sistema migliore e più veloce per backuppare db.
    Questo piccolo script php sfrutta proprio questo programma.
    Io l'ho provato sia su linux che su win e funziona, con un semplice click e poche righe di codice si può scaricare velocemente in locale il dump del db.
    C'è da dire che i server che ho utilizzato sono miei e quindi l'utilizzo delle funzioni per l'esecuzione di programmi esterni non è disabilitata.
    Se siete in hosting dovete verificare la posiibilità di utilizzare funzioni per programmi esterni.
    Ecco lo script per il dump:
    codice:
    <?
    $db_name="NOME_DATABASE"; // nome database
    $user="utente_db"; // nome utente mysql
    $psw="password_db"; // password utente mysql
    $filename=$db_name."-".date("Y-m-d").".sql"; // nome del file del dump con la data odierna
    $percorso_file="/var/tmp/".$filename; // percorso file temporaneo del dump per linux (io uso /var/tmp). Commentare su win
    // $percorso_mysql="C:/Programmi/mysql/MySQL Server 4.1/bin"; // percorso mysql: solo per windows (cambiare se necessario). Commentare su linux
    // DUMP
    // system("\"$percorso_mysql\mysqldump\" --user=$user --password=$psw $db_name > $percorso_file"); // per windows. commentare se su linux
    system("mysqldump --user=$user --password=$psw $db_name > $percorso_file"); // per linux. commentare se su win
    // SE IL BROWSER E' INTERNET EXPLORER
    if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER['HTTP_USER_AGENT'])) {
    header("Content-Type: application/octetstream");
    header("Content-Disposition: inline; filename=$filename");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: public");
    }
    else {
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$filename");
    header("Expires: 0");
    header("Pragma: no-cache");
    }
    require($percorso_file);
    unlink($percorso_file);	
    ?>
    IMPORT DATABASE USANDO PHP E MYSQL
    myslq è un altro programma di mysql per eseguire alcune operazioni da shell, come ad esempio l'import di db. Vale lo stesso discorso fatto precedentemente per l'hosting.
    Ecco lo script per l'import.
    codice:
     
    <?php
    // connessione a mysql
    $host="localhost";
    $utente="user";
    $passwut="password";
    // connessione al db
    $link=mysql_connect($host,$utente,$passwut);
    if(!$link) die("Impossibile connettersi al database MYSQL. Errore: ".mysql_error());
    $file_db="/var/tmp/dumpdb.sql"; // file proveniente dal dump (ometto la parte di upload per semplificare lo script)
    $db_name="NOME_DB";
    if(file_exists($file_db)){
    // cancellazione vecchio db
    $query1="DROP DATABASE $db_name";	
    mysql_query($query1,$link) or die("Impossibile eseguire la query $query1
    Errore:".mysql_error());	
    // creazione nuovo db
    $query2="CREATE DATABASE $db_name";	
    mysql_query($query2,$link) or die("Impossibile eseguire la query $query2
    Errore:".mysql_error());
    $system_query="mysql --user=".$utente." --password=".$passwut." ".$db_name." < ".$file_db; 
    // $percorso_mysql="C:/Programmi/mysql/MySQL Server 4.1/bin"; // percorso mysql: solo per windows (cambiare se necessario). Commentare su linux
    // DUMP
    // system("\"$percorso_mysql\$system_query"); // per windows. commentare se su linux
    $sr=system( $system_query ); // per linux. commentare se su win
    print "
    
    Database aggiornato! $sr</p>";
    print "
    
    ".$system_query."</p>";
    }
    else print "file non presente";
    ?>

  2. #2

    Re: [micro pillolina] dump e import veloce di db di grandi dimensioni con php e mysql

    [supersaibal]Originariamente inviato da Teuzzo
    ...
    Se siete in hosting dovete verificare la posiibilità di utilizzare funzioni per programmi esterni.


    Non solo.. anche verificare di aver accesso a quell'eseguibile...[/supersaibal]
    Va detto cmq che anche se più lenta l'esportazione si può benissimo fare con phmyadmin... è l'importazione da phpmyadmin che è impossibile da fare in tempi accettabili, se il database è volumioso


    cmq è un tentativo da fare per chi non ha altre possibilità


  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969

    Re: Re: [micro pillolina] dump e import veloce di db di grandi dimensioni con php e mysql

    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    Va detto cmq che anche se più lenta l'esportazione si può benissimo fare con phmyadmin... è l'importazione da phpmyadmin che è impossibile da fare in tempi accettabili, se il database è volumioso


    cmq è un tentativo da fare per chi non ha altre possibilità

    [/supersaibal]
    Si, effettivamente con phpMyAdmin si possono esportare senza problemi db anche di grosse dimensioni.
    Io ho usato quel sistema di dump per dare la possibilità a clienti di fare il backup del db del proprio sito con un click senza dover usare phpMyAdmin.

  4. #4
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Piccola modifica:
    è meglio usare readfile al posto di require, perchè potrebbe creare errori sull'output di alcuni caratteri, ad esempio nei campi blob:

    Codice PHP:
    readfile($percorso_file); 
    al posto di

    Codice PHP:
    require($percorso_file); 
    nel file dump.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    48
    Se uso questo script nel file SQL non è solo contenuto il backup del database ma anche il codice HTML della pagina nella quale è contenuto lo script

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 © 2024 vBulletin Solutions, Inc. All rights reserved.