Script PHP - Optimiser toutes les bases de données.

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Script PHP - Optimiser toutes les bases de données.

Message le Lun Fév 06, 2006 9:04

Bonjour,

Je souhaiterai savoir s'il existe un script permettant d'optimiser toutes les bases de données, sans devoir renseigner quel bases sont existantes.

Ceci pour but sur un dédié de lancer le script une fois par mois...


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5181
Inscription: Jeu Oct 20, 2005 19:47

Message le Lun Fév 06, 2006 10:54

Il y a effectivement une commande mais là, je ne me rappel plus trop...
Regarde sur les sites de PHP, ça doit être mis quelque part...

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Lun Fév 06, 2006 11:30

Je te laisse le soin de faire le script mais je te donne les 3 requêtes qui te serviront à construire le tout.

Code: Tout sélectionner
SHOW DATABASES


Code: Tout sélectionner
USE {$database}


Code: Tout sélectionner
SHOW TABLE STATUS

(dans celle-là, ne te sers que des lignes où Data_free > 0)

Puis pour finir
Code: Tout sélectionner
OPTIMIZE TABLE {$table}


Au besoin je te ponds le code entier ;)

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 11:35

Merci je fais chercher un peu...
En fait ça je connaissais:
OPTIMIZE TABLE

Mais je sais que l'on pouvait le faire pour une table spécifique (donc il faut connaitre toutes les tables, un peu fastidieux, si l'on en rajoute chaque foi..).

Le truc est que je suis entrain de chercher une méthode pas trop lourde pour lister les table, ou simplement le fiare d'une manière global sur toute les tables, un genre de ALL.

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Lun Fév 06, 2006 11:37

Petite astuce, voici à quoi servent respectivement les requêtes que je t'ai donné :
  1. Lister les bases de données
  2. Sélectionner une base de données
  3. Lister les tables de la base en cours d'utilisation (cf #2)
  4. Optimiser une table donnée

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 11:56

Le point 3 sert à quoi ?
(on ne peut optimiser une table utilisée ?)
très peut de chance de pouvoir les optimiser alors, si elles sont souvent utilisées...

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Lun Fév 06, 2006 11:58

-_- OK bon spa grave, j'te fais le script ça ira plus vite.
(en cours d'utilisation : cf #2 avec le USE database, ça concerne la base, pas la table et indépendamment de ce que tes scripts font ailleurs).

Bref j'te fais ça quand je peux hein.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 12:20

:oops: :oops:

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Lun Fév 06, 2006 12:28

Code: Tout sélectionner
<?php
$mysql_connexion = mysql_connect('localhost', '***', '***', true);

//ETAPE 1 : on liste les bases de données
$db = array();
$mysql_query = mysql_query("SHOW DATABASES;");
while( $ligne = mysql_fetch_assoc($mysql_query) )
{
   array_push($db, $ligne['Database']);
}

//ETAPE 2 : pour chaque base, on liste les tables pour ne conserver que celles qu'on optimisera
foreach( $db as $database )
{
   mysql_query("USE `{$database}`");
   //
   $tables = array();
   $mysql_query = mysql_query("SHOW TABLE STATUS;");
   while( $ligne = mysql_fetch_assoc($mysql_query) )
   {
      //seulement s'il y a des pertes de données
      if( $ligne['Data_free'] > 0 )
      {
         array_push($tables, '`'.$ligne['Name'].'`');
      }
   }
   
   //Optimisation
   $tables = implode(',', $tables);
   mysql_query("OPTIMIZE TABLES {$tables};");
}

//ETAPE 3 : on clôture la connexion
mysql_close($mysql_connexion);
unset($mysql_connexion, $mysql_query, $tables, $database, $db, $ligne);
?>

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 13:21

8O

Et bien merci infiniement !!!
A moi maintenant de bien tout comprendre !;)

Merci beaucoup.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 13:27

Une question:
Avec le USE pourquoi les `{ }` ?

http://dev.mysql.com/doc/refman/5.0/fr/use.html
ici ils ne sont pas mentionné ? une sécurité ?

Pareil pour ça :
Code: Tout sélectionner
array_push($tables, '`'.$ligne['Name'].'`');

Je ne comprends pas les `.

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Lun Fév 06, 2006 13:35

Normal car là ça concerne PHP. Ca permet de bien délimiter la variable qu'on utilise dans une chaîne.

Code: Tout sélectionner
"USE `{$database}`"

revient au même que
Code: Tout sélectionner
"USE `".$database."`"


A part que la deuxième écriture est un poil plus rapide mais plus chiante à lire (à mes yeux).

Pour l'histoire de l'array_push, je stocke dans un tableau le nom des tables encadrées avec des ` (pour éviter des problèmes de mots clés réservés à MySQL). C'est tout. tu peux les enlever mais si un jour tu nommes mal une table, ça la fera planter ^^

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Lun Fév 06, 2006 13:42

ok merci.

Donc les ` dans le premier cas c'est pour le même principe...mots réservés.

OK merci à toi encore, c'est vraiment sympa de ta part !


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google AdWords API

  • Test data centers Google
    Cet outil vous permet d'afficher sur une seule page les résultats Google effectués sur de nombreux data centers (centres de données).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


cron