Archivi tag: amministrazione

Convertire tutte le tabelle di un DB MySQL da MyISAM a InnoDB con uno script linux

E’ possibile convertire in un colpo solo tutte le tabelle di un database MySQL da MyISAM a InnoDB tramite due comandi digitati dalla shell di linux:

 mysql -p -e "show tables in nome_database;" | tail --lines=+2 | xargs -i echo "ALTER TABLE {} ENGINE=INNODB;" > converti_engine.sql

Il primo comando si connette al database, recupera tutti i nomi delle tabelle (e delle viste!) e le combina, tramite il comando xargs, con il comando SQL che permette di cambiare l’engine a InnoDB. Ovviamente nome_database è da sostituire con il nome dello schema in questione. Il risultato è uno script SQL che verrà lanciato in seguito. L’unico accorgimento da adottare è quello di rimuovere le eventuali righe che contengono l’alter table di viste (che darebbero errore durante l’interpretazione e bloccherebbero lo script).

Controllato lo script, è sufficiente eseguirlo con il comando di seguito:

mysql -u root -p nome_database < converti_engine.sql

che chiederà la password ed eseguirà lo script appena preparato.

 

Linux – Spazio su disco esaurito, ma lo spazio c’è! Soluzione: Inodes esauriti!

Una strana situazione che, talvolta, si può presentare su server linux che stanno accesi da anni è quella di ottenere il messaggio: No space left on device. A questo punto l’operazione più logica da fare è digitare

df -h

ma quando si scopre che c’è ancora spazio su disco disponibile, c’è subito da accertarsi con il comando

df -i

che gli Inode non siano terminati.

Qualora il comando restituisca il 100% utilizzato, allora è il momento di individuare in quale directory sono contenuti (una miriade) i file che impegnano tutta la tabella del filesystem.

a questo punto è sufficiente digitare il comando

for i in /*; do echo $i; find $i |wc -l; done

che elencherà tutte le cartelle contenute nella root / con il numero di file contenuti. Individuata un cartella contenente molti file (per esempio /var/), basta andare nel dettaglio col comando

for i in /var/*; do echo $i; find $i |wc -l; done

Una volta individuata la cartella, verosimilmente contenente dei file temporanei, di spool, o una cartella utente che si è riempita nel tempo, basta svuotare la cartella con il comando:

rm -rf /percorso/con/una/miriade/di/file

digitando df -i la situazione dovrebbe tornare sotto controllo. Al più è consigliabile fare un riavvio della macchina per assicurarsi che tutto riparta correttamente.