Forzare l'allocazione di tabelle InnoDB in singoli files in MySql
Introduzione
- Per default le tabelle InnoDB vengono scritte tutte nel file ibdata1, e quando vengono cancellate, non c'è modo di recuperare lo spazio occupato.
- Per fare in modo di recuperare lo spazio occupato dalle tabelle eliminate, occorre eliminare le tabelle create, impostare la configurazioen di mysql e ripristinare la tabelle
- In questo modo le tabelle verranno create in singoli files, che verranno cancellati alla loro distruzione
Backup del DB
- Fare un backup di tutti i db
mysqldump --all-databases --events -p -r /tmp/mysqldump.sql
- Eliminare tutti i DB, ad eccezione di
information_scheme
mysql performance_schema
- Fermare il DB
systemctl stop mysql.service
Impostazione della configurazione
sudoedit /etc/mysql/my.cnf
[mysqld] innodb_file_per_table innodb_flush_method=O_DIRECT innodb_log_file_size=1G innodb_buffer_pool_size=4G
Eliminazione dei files InnoDB
rm -f /var/lib/mysql/ibdata1* /var/lib/mysql/ib_logfile*
Ripristino del DB
systemctl start mysql.service mysql -p < /tmp/mysqldump.sql
Verifica
- Verificare che le tabelle InnoDB siano salvate nelle directory corrispondenti ai loro DB:
ls /var/lib/mysql/