Quel ibdata1
non si restringe è una caratteristica particolarmente fastidiosa di MySQL. Il ibdata1
il file non può essere effettivamente ridotto a meno che non elimini tutti i database, rimuovi i file e ricarichi un dump.
Ma puoi configurare MySQL in modo che ogni tabella, inclusi i suoi indici, sia archiviata come un file separato. In questo modo ibdata1
non crescerà così grande. Secondo Commento di Bill Karwin questo è abilitato per impostazione predefinita a partire dalla versione 5.6.6 di MySQL.
È stato un po' di tempo fa che l'ho fatto. Tuttavia, per configurare il tuo server in modo che utilizzi file separati per ogni tabella, devi modificare my.cnf
per abilitarlo:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Come vuoi recuperare lo spazio da ibdata1
in realtà devi eliminare il file:
- Fai un
mysqldump
di tutti i database, procedure, trigger ecc trannemysql
eperformance_schema
banche dati - Elimina tutti i database tranne i 2 database precedenti
- Interrompi MySQL
- Elimina
ibdata1
eib_log
file - Avvia MySQL
- Ripristina da dump
Quando avvii MySQL nel passaggio 5, ibdata1
e ib_log
i file verranno ricreati.
Ora sei pronto per andare. Quando crei un nuovo database per l'analisi, le tabelle si troveranno in ibd*
separati file, non in ibdata1
. Poiché di solito elimini il database subito dopo, ibd*
i 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 dati e pagine di indice da ibdata1 per separare i file. Tuttavia, ibdata1 non si ridurrà se non esegui i passaggi precedenti.
Riguardo allo information_schema
, che non è necessario né possibile eliminare. In realtà sono solo un mucchio di visualizzazioni di sola lettura, non tabelle. E non ci sono file associati a loro, nemmeno una directory di database. Lo information_schema
sta usando la memoria db-engine e viene rilasciato e rigenerato all'arresto/riavvio di mysqld. Vedi https://dev.mysql.com/doc/ refman/5.7/en/schema-informativo.html
.