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

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...
 
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...
 
Je te laisse le soin de faire le script mais je te donne les 3 requêtes qui te serviront à construire le tout.

Code:
SHOW DATABASES

Code:
USE {$database}

Code:
SHOW TABLE STATUS
(dans celle-là, ne te sers que des lignes où Data_free > 0)

Puis pour finir
Code:
OPTIMIZE TABLE {$table}

Au besoin je te ponds le code entier ;)
 
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.
 
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
 
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...
 
-_- 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.
 
Code:
<?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);
?>
 
Normal car là ça concerne PHP. Ca permet de bien délimiter la variable qu'on utilise dans une chaîne.

Code:
"USE `{$database}`"
revient au même que
Code:
"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 ^^
 
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 !
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut