Tempo di lettura: < 1 minuto

Se abbiamo un database con molte operazioni di scrittura, è possibile che le tabelle richiedano più spazio del necessario (le classiche tabelle deframmentate). Questo perché in effetti MySQL non libera lo spazio dei dati cancellati, quindi richiede spesso l’avvio dell’istruzione OPTIMIZE TABLE.

Lo script che segue è scritto in bash ed esegue la precedente istruzione su ciascuna delle tabelle del nostro database.

Può essere utile salvare lo script in /usr/local/sbin/ottimizzatabelle.sh con permessi molto ristretti (per esempio chmod 600) perché quando andremo a sostituire LAMIAPASSWORD con la password di root di MySQL questa sarà scritta in chiaro sul file dello script.

#!/bin/bash
 
MYSQL_LOGIN='-u root --password=LAMIAPASSWORD'
 
for db in $(echo "SHOW DATABASES;" | mysql $MYSQL_LOGIN | grep -v -e "Database" -e "information_schema")
do
  TABLES=$(echo "USE $db; SHOW TABLES;" | mysql $MYSQL_LOGIN |  grep -v Tables_in_)
  echo "Passo al database: $db"
  for table in $TABLES
  do
    echo -n " * Ottimizzazione della tabella: $table ... "
    echo "USE $db; OPTIMIZE TABLE $table" | mysql $MYSQL_LOGIN  >/dev/null
    echo "fatto."
  done
done