• 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