Ciò che ibdata1
non si sta riducendo è una caratteristica particolarmente fastidiosa di MySQL. Il ibdata1
file non può effettivamente essere ridotto a meno che non si eliminino tutti i database, si rimuovano i file e si ricarichi un dump.
Ma puoi configurare MySQL in modo che ogni tabella, compresi i suoi indici, sia memorizzata come file separato. In questo modo ibdata1
non crescerà così grande. Secondo il commento di Bill Karwin, questo è abilitato di default a partire dalla versione 5.6.6 di MySQL.
È stato poco fa. Tuttavia, per configurare il server in modo da utilizzare file separati per ogni tabella, è necessario modificare my.cnf
per abilitare questo:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
Come vuoi recuperare lo spazio da ibdata1
devi effettivamente eliminare il file:
- Esegui
mysqldump
tutti i database, le procedure, i trigger ecc. Tranne i database mysql
eperformance_schema
- Eliminare tutti i database tranne i 2 database precedenti
- Smetti di mysql
- Elimina
ibdata1
eib_log
file
- Inizia mysql
- Ripristina dalla discarica
Quando avvii MySQL al passaggio 5 , verranno ricreati i file ibdata1
e ib_log
.
Ora sei pronto per partire. Quando si crea un nuovo database per l'analisi, le tabelle si trovano in ibd*
file separati , non in ibdata1
. Poiché di solito si rilascia il database subito dopo, i ibd*
file verranno eliminati.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Probabilmente hai visto questo:
http://bugs.mysql.com/bug.php?id=1341
Usando il comando ALTER TABLE <tablename> ENGINE=innodb
o OPTIMIZE TABLE <tablename>
si possono estrarre i dati e indicizzare le pagine da ibdata1 in file separati. Tuttavia, ibdata1 non si ridurrà se non si eseguono i passaggi precedenti.
Per quanto riguarda il information_schema
, non è necessario né possibile abbandonare. In realtà è solo un mucchio di viste di sola lettura, non tabelle. E non ci sono file associati ad essi, nemmeno una directory di database. La informations_schema
sta usando il db-motore memoria e si elimina e viene rigenerato in arresto / riavvio di mysqld. Vedi https://dev.mysql.com/doc/refman/5.7/en/information-schema.html .