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
mysqldumpdi tutti i database, procedure, trigger ecc trannemysqleperformance_schemabanche dati - Elimina tutti i database tranne i 2 database precedenti
- Interrompi MySQL
- Elimina
ibdata1eib_logfile - 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.
https://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Probabilmente hai visto questo:
https://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
.