2012-01-06 15 views
7

Dodając kolumnę do tabeli MyISAM, MySQL utworzy> Kopiuj> Upuść> Zmień nazwę. Mam tabelę, która jest na tyle duża, że ​​nie można jej powielić na pozostałej wolnej przestrzeni serwera. Próba dodania kolumny powoduje wypełnienie dysku. Czas nie jest tu problemem, nie jest też dostępność stołu, tylko miejsce na dysku.MySQL ALTER TABLE na tabelach zbyt dużych, aby powielić

Krótki kopiowania danych na inny serwer, skracanie, zmienianie i kopiowanie z powrotem, czy istnieje sposób, aby dodać kolumnę do tabeli MyISAM bez to tworzenie tabeli tymczasowej i powielania wszystkich danych?

Odpowiedz

3

Można utworzyć nową, pustą tabelę, ręcznie przenieść dane w porcjach (INSERT do nowego, DELETE ze starej określonej liczby wierszy), upuść starą tabelę i zmień nazwę nowej tabeli. Zasadniczo to, co robi MySQL, ale przenoszenie danych zamiast ich kopiowania, co powinno pozwolić na użycie mniejszej ilości miejsca.

+0

Obawiałem się tego, ale mając nadzieję na mniej ręczne podejście. Być może to właśnie robię. – Umbrella

+1

Ostatecznie to podejście się nie powiodło, wypełniając dysk mimo mojego rozmiaru plastra. MySQL nie zwolnił dysku z usuniętych wierszy. Uruchomienie OPTIMIZE w celu poinformowania MySQL o zwolnieniu dysku wypełniło dysk. – Umbrella

+0

Zgaduję, że lepiej by działało z InnoDB, ponieważ nowa tabela użyłaby darmowych stron w pliku idb. Obawiam się, że nie mam żadnych innych pomysłów, przepraszam. –

1

Generalnie staram się zachować wystarczającą ilość wolnego miejsca, aby móc odbudować mój największy stół. To pozwala mi uruchomić w razie potrzeby OPTIMIZE TABLE lub ALTER TABLE.

Czy masz inny dysk zamontowany na serwerze?

Gdy miejsce jest zbyt ciasne, aby odbudować daną tabelę, moim preferowanym obejściem jest tymczasowe przeniesienie innych tabel na oddzielny wolumin dysku. Robię to, zatrzymując MySQL, przenosząc odpowiednie pliki danych (MYD i MYI lub ibd), a następnie tworząc dowiązanie symboliczne w oryginalnej lokalizacji, która wskazuje na nową lokalizację i uruchamiając MySQL. Po zakończeniu przebudowy tabeli cofam ten proces, aby przenieść inne tabele z powrotem do ich pierwotnej lokalizacji.

+1

Niestety, nie ma dodatkowego miejsca do przyłączenia do tego hosta. – Umbrella

Powiązane problemy