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

From RVM Wiki
Revision as of 09:42, 26 April 2016 by Gabriele.vivinetto (talk | contribs) (Created page with "=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 ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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=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/ 

Riferimenti