Forzare l'allocazione di tabelle InnoDB in singoli files in MySql

From RVM Wiki
Jump to navigation Jump to search

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=100M
innodb_buffer_pool_size=1G

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 della dimensione di innodb_buffer_pool_size

  • Eseguire questa query, che da il ruslttao in GB:
SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
(SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
FROM information_schema.tables WHERE engine='InnoDB') A;

+-------+
| RIBPS |
+-------+
|     1 |
+-------+


Verifica

  • Verificare che le tabelle InnoDB siano salvate nelle directory corrispondenti ai loro DB:
ls /var/lib/mysql/ 

Riferimenti