Mysql
 sql >> Database >  >> RDS >> Mysql

Come ridurre/eliminare il file ibdata1 in MySQL

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:

  1. Fai un mysqldump di tutti i database, procedure, trigger ecc tranne mysql e performance_schema banche dati
  2. Elimina tutti i database tranne i 2 database precedenti
  3. Interrompi MySQL
  4. Elimina ibdata1 e ib_log file
  5. Avvia MySQL
  6. 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 .