Co to jest plik ibdata1 w moim katalogu / var / lib / mysql?
32
Logując się do panelu sterowania Webmin, zauważyłem, że praktycznie całe moje miejsce na dysku jest pełne. Szukałem dziesięciu największych plików / katalogów w moim systemie i odkryłem, że plik o nazwie ibdata1 zajmuje około 94 GB miejsca. Znajduje się w moim katalogu / var / lib / mysql.
Co robi ibdata1? Czy mogę to bezpiecznie usunąć? Zakładam, że to jakiś zrzut, ale to tylko zgadywanka.
Plik ibdata1jest systemowym obszarem tabel dla infrastruktury InnoDB.
Zawiera kilka klas informacji istotnych dla InnoDB
Strony danych tabeli
Tabele indeksu stron
Słownik danych
Dane kontrolne MVCC
Cofnij spację
Wycofywanie segmentów
Podwójny bufor zapisu (strony zapisane w tle, aby uniknąć buforowania systemu operacyjnego)
Wstaw bufor (zmiany w indeksach pomocniczych)
Zwróć uwagę na miejsce ibdata1 we Wszechświecie InnoDB (po prawej stronie)
Możesz oddzielić dane i strony indeksowe ibdata1, włączając opcję innodb_file_per_table . Spowoduje to, że każda nowo utworzona tabela InnoDB będzie przechowywać dane i strony indeksowe w .ibdpliku zewnętrznym .
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, tworzy /var/lib/mysql/mydb/mytable.frm
innodb_file_per_table włączony, Strony danych / indeksu przechowywane w /var/lib/mysql/mydb/mytable.ibd
innodb_file_per_table wyłączony, Strony danych / indeksu przechowywane w ibdata1
Niezależnie od tego, gdzie przechowywana jest tabela InnoDB, funkcjonalność InnoDB wymaga szukania metadanych tabeli oraz przechowywania i pobierania informacji MVCC w celu zapewnienia zgodności z ACID i izolacji transakcji .
Oto moje poprzednie artykuły na temat oddzielania danych tabeli i indeksów od ibdata1
Możesz nadal przechowywać wszystko w ibdata1, ale to sprawia, że robienie migawek LVM jest prawdziwą nudą (moja osobista opinia).
Musisz użyć postu My StackOverflow i zmniejszyć plik na stałe.
Uruchom to zapytanie:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Dzięki temu dowiesz się, ile straconego miejsca można odzyskać po zastosowaniu czyszczenia InnoDB.
Dzięki za wkład. Od tego czasu mój limit miejsca na dysku został całkowicie wypełniony - czy będę potrzebować wolnego miejsca? Zwracam uwagę, że twój oryginalny post na SO wspomina o zrobieniu zrzutu SQL, ale prawdopodobnie stworzyłoby to plik o wielkości ~ 90 GB, do którego nie ma dokąd pójść.
James
mysqldump będzie tylko logiczną reprezentacją stron danych, a nie indeksów. Aby zrzucić dane, będziesz potrzebować innego dysku, być może zdalnego serwera.
RolandoMySQLDBA
9
Zwraca 91.25350952148438 dla mnie jako SpaceToReclaim. Czy to jest w megabajtach? procent? bajty?
Izaak
Wiem, że to jest za stare. Ale dla każdego, kto przyjdzie tutaj z problemem, musisz zastąpić numer 94dowolnym rozmiarem ibdata1pliku w GB, a on SpaceToReclaimda ci rozmiar w GB.
anupsabraham
8
Ten plik ibdata1nie jest ibdatali zawiera wszystkie Twoje bazy danych InnoDB. Jeśli go usuniesz, stracisz wszystkie swoje dane.
Jeśli użyjesz innodb jako silnika MySQL domyślnie zapisze wszystkie twoje bazy danych w ibdata1. Istnieją również pliki dziennika ib_logfile0 i ib_logfile1. Nie usuwaj tych plików.
SpaceToReclaim
. Czy to jest w megabajtach? procent? bajty?94
dowolnym rozmiaremibdata1
pliku w GB, a onSpaceToReclaim
da ci rozmiar w GB.Ten plik
ibdata1
nie jestibdatal
i zawiera wszystkie Twoje bazy danych InnoDB. Jeśli go usuniesz, stracisz wszystkie swoje dane.Aby dowiedzieć się, jak sobie z tym poradzić, zobacz Jak zmniejszyć / wyczyścić plik ibdata1 w MySQL .
źródło
Jeśli użyjesz innodb jako silnika MySQL domyślnie zapisze wszystkie twoje bazy danych w ibdata1. Istnieją również pliki dziennika ib_logfile0 i ib_logfile1. Nie usuwaj tych plików.
źródło