Går att göra med valfritt scriptspråk som kan prata med MySQL-servern. Nånting sånt här borde fungera i PHP. Inte testkört, men eventuella fel borde vara enkla att rätta till. Används vanliga mysql-extension istället för mysqli så behöver man bara kasta bort i'na från funktionsnamnen och plocka bort $mysqli från argumenten.
Kod:
<?php
// se till att bli klar om scriptet kallas från en webläsare
set_time_limit(0);
ignore_user_abort(1);
// anslut till mysql
$mysqli = mysqli_connect('host', 'användare', 'lösen');
// databaser som ej ska röras
$databases_skip = array('mysql', 'information_schema', 'test');
// hämta alla databaser
$databases = array();
$q = mysqli_query($mysqli, "SHOW DATABASES");
while ($row = mysqli_fetch_row($q)) {
if (!in_array($row[0], $databases_skip)) {
$databases[] = $row[0];
}
}
// för varje databas...
foreach ($databases as $database) {
// ... hämtas alla tabeller...
$q = mysqli_query($mysqli, "SHOW TABLES IN " . mysqli_real_escape_string($mysqli, $database));
while ($row = mysqli_fetch_row($q)) {
// ... som sedan optimeras
mysqli_query($mysqli, "OPTIMIZE TABLE " . mysqli_real_escape_string($mysqli, $row[0]));
}
}
?>