• Moderatore

    ottimizzare Mysql con php

    Ciao ragazzuoli esiste uno script che mi permette di ottimizzare il db da una pagina php?

    perchè molte volte trovo scomodo doverlo fare tramite db stesso.

    una altra cosa come mai c'è questo problema che le tabelle hanno un surplus di dati? deriva da me o dal db stesso??

    thx^_^


  • User Attivo

    Ti puoi creare tu stesso alcune righe in php che aprono la connessione e fanno l'optimize delle tabelle. Sono poche righe di codice.
    Le tabelle hanno un surplus di dati in caso di cancellazioni in quanto al momento del delete i dati non vengon fisicamente cancellati ma solo flaggati come "deleted". Vengono poi riutilizzati da nuovi inserimenti (e quindi non si perde spazio)


  • Moderatore

    non so creare quelle poche righe nel senso che non so che funzione o altro adoperare^_^


  • Moderatore

  • Moderatore

    [php]
    <?
    $host = "host_database";
    $user = "username";
    $pass = "password";
    $db_name = "nome_del_database";

    $db = mysql_connect($host, $user, $pass);
    mysql_select_db($db_name, $db);

    echo "Ottimizzazione DataBase in corso...";
    $SQL = "OPTIMIZE TABLE ";
    $result = mysql_list_tables($DATABASE);
    $i = 0;
    while ($i < mysql_num_rows($result)) {
    $name_table = mysql_table_name($result, $i);
    echo "Ottimizzazione tabella: $name_table .....<BR>";
    $SQL .= $name_table;
    $SQL .= ",";
    $i++;
    }
    $SQL = substr($SQL,0,strlen($SQL)-1);
    $result_set = mysql_query($SQL);
    mysql_free_result($result_set);

    ?>
    [/php]

    a chiunque servisse^_^


  • Moderatore

    [php]
    <?
    $host = "host_database";
    $user = "username";
    $pass = "password";
    $db_name = "nome_del_database";

    $db = mysql_connect($host, $user, $pass);
    mysql_select_db($db_name, $db);

    echo "Ottimizzazione DataBase in corso...";
    $SQL = "OPTIMIZE TABLE ";
    $result = mysql_list_tables($db_name);
    $i = 0;
    while ($i < mysql_num_rows($result)) {
    $name_table = mysql_tablename($result, $i);
    echo "Ottimizzazione tabella: $name_table .....<BR>";
    $SQL .= $name_table;
    $SQL .= ",";
    $i++;
    }
    $SQL = substr($SQL,0,strlen($SQL)-1);
    $result_set = mysql_query($SQL);
    mysql_free_result($result_set);

    ?>
    [/php]

    ragazzi dopo aver sistemato lo script per un errorino ora mi trovo questo errore:

    il valore dato per mysql_free_result() non è giusto/corretto.

    qualcuno può controllarlo? thx^_^


  • User Newbie

    $db = mysql_connect($host, $user, $pass);

    deve essere così:

    $db = mysql_connect($db_host, $db_user, $db_pass);

    cmq il resto mi sembra sia corretto xchè l'ho provato e funziona.


  • Moderatore

    $db = mysql_connect($host, $user, $pass);

    deve essere così:

    $db = mysql_connect($db_host, $db_user, $db_pass);

    E perché?


  • Moderatore

    massy puoi verificare se funge? ti prego perchè a me nn va

    @cristiano

    ma che dici? ti rendi conto che così facendo imposterei variabili inesistenti?:D

    a buon rendere


  • User Newbie

    ah già... un lapsus, è che io sn abituato ad usare quelle variabili x quei dati. cmq l'ho provato e funziona!


  • Moderatore

    tu dici che funge ma a me non ottimizza nada....:S sei sicuro di ciò che dici?


  • User Attivo

    Puoi fare una prova, prima della mysql_query fai:

    echo $SQL;

    E vedi cosa ti scrive, poi, se ti sembra corretto, lo vai a scrivere in phpmyadmin e vedi cosa ti risponde e se effettivamente fa quello che ti aspetti!


  • User

    Prova questo script:
    <?
    if (!ini_get('safe_mode')) {
    set_time_limit(2400);
    }
    $host="localhost";
    //oppure $host="192.168.0.1";
    $user ="nome utente amministratore db";
    $pass = "password utente";
    $DB_name="nome del database da ottimizzare";
    $msg="";
    $link = mysql_connect($host,$user,$pass);
    if ( ! $link ) die("Errore ...impossibile connettersi a MYSQL");
    if([EMAIL="!@mysql_select_db($DB_name,$link"]!@mysql_select_db($DB_name,$link[/EMAIL])) die("Errore ...impossibile connettersi al DataBase".mysql_error());
    }
    echo <<<EOT
    <html><head><title>Ottimizzazione Tabelle</title>
    <STYLE TYPE="text/css">
    BODY{BACKGROUND-COLOR: #dfdfd1;FONT:BOLDER 14px VERDANA,ARIAL,MS Sans Serif;color:red;}
    </STYLE>
    </head>
    <body >
    <center>
    <h3>Ottimizzazione Tabelle<br> $DB_user</h3>
    <p>
    EOT;
    $query="SHOW TABLE STATUS FROM $DB_name ";
    $result= mysql_query ($query) or die ("errore : ". mysql_error() );
    if(mysql_num_rows($result)){
    while($row=mysql_fetch_array($result)){
    $query='OPTIMIZE TABLE '.$row[0];
    $result1=mysql_query($query) or die("errore : ". mysql_error()."\n");
    $row1=mysql_fetch_row($result1);
    if($row1[2]!='status') echo "Tabella: $row[0] <br> - $row1[2]: $row1[3]<br>";
    else echo "Tabella: $row[0] O.K.<br>";
    }
    }
    echo <<<EOT
    <script>
    alert("Ottimizzazione O.K.")
    self.close()
    </script>
    EOT;
    exit;
    ?>

    Io lo uso da tempo e funziona
    Ciao cirpack