Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zmniejszyć/wyczyścić plik ibdata1 w MySQL?

Ten ibdata1 nie kurczy się jest szczególnie irytującą cechą MySQL. ibdata1 plik nie może być w rzeczywistości zmniejszony, chyba że usuniesz wszystkie bazy danych, usuniesz pliki i ponownie załadujesz zrzut.

Ale możesz skonfigurować MySQL tak, aby każda tabela, w tym jej indeksy, była przechowywana jako osobny plik. W ten sposób ibdata1 nie będzie tak duży. Według komentarz Billa Karwina jest to domyślnie włączone od wersji 5.6.6 MySQL.

Zrobiłem to jakiś czas temu. Jednak, aby skonfigurować serwer tak, aby używał oddzielnych plików dla każdej tabeli, musisz zmienić my.cnf aby to umożliwić:

[mysqld]
innodb_file_per_table=1

https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html

Jak chcesz odzyskać miejsce z ibdata1 faktycznie musisz usunąć plik:

  1. Wykonaj mysqldump wszystkich baz danych, procedur, wyzwalaczy itp. z wyjątkiem mysql i performance_schema bazy danych
  2. Upuść wszystkie bazy danych z wyjątkiem powyższych 2 baz danych
  3. Zatrzymaj mysql
  4. Usuń ibdata1 i ib_log pliki
  5. Uruchom mysql
  6. Przywróć ze zrzutu

Po uruchomieniu MySQL w kroku 5 ibdata1 i ib_log pliki zostaną odtworzone.

Teraz możesz iść. Kiedy tworzysz nową bazę danych do analizy, tabele będą znajdować się w oddzielnym ibd* pliki, nie w ibdata1 . Ponieważ zwykle upuszczasz bazę danych wkrótce po tym, ibd* pliki zostaną usunięte.

http://dev.mysql.com/doc/refman /5.1/pl/drop-database.html

Prawdopodobnie widziałeś to:
http://bugs.mysql.com /bug.php?id=1341

Za pomocą polecenia ALTER TABLE <tablename> ENGINE=innodb lub OPTIMIZE TABLE <tablename> można wyodrębnić dane i strony indeksowe z ibdata1 do oddzielnych plików. Jednak ibdata1 nie zmniejszy się, chyba że wykonasz powyższe kroki.

Odnośnie information_schema , który nie jest konieczny ani możliwy do zrzucenia. W rzeczywistości jest to tylko kilka widoków tylko do odczytu, a nie tabel. I nie ma z nimi żadnych plików, nawet katalogu bazy danych. informations_schema używa pamięci db-engine i jest usuwany i regenerowany podczas zatrzymania/restartowania mysqld. Zobacz https://dev.mysql.com/doc/ refman/5.7/en/schemat-informacyjny.html .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wprowadzenie do typów danych MySQL

  2. Jak przyciąć tabelę w MySQL

  3. Jak utworzyć fałszywe kolumny zmiennych dla tysięcy kategorii w Google BigQuery?

  4. MySQL, zaktualizuj wiele tabel za pomocą jednego zapytania

  5. Ile wierszy w bazie danych to ZA DUŻO?