Edytuj 2016: niedawno (sierpień 2016) wydaliśmy gh-ost
, modyfikując moją odpowiedź, aby ją odzwierciedlić.
Obecnie istnieje kilka narzędzi, które pozwalają tworzyć online alter table dla MySQL. Są to:
- edytuj 2016: gh-ost :narzędzie GitHub do migracji schematów bez wyzwalania (zastrzeżenie:jestem autorem tego narzędzia)
- oak-online- stół alternatywny , jako część zestawu openark (zastrzeżenie:jestem autorem tego narzędzia)
- pt-online-schema- zmiana , jako część zestawu narzędzi Percona
- Facebook zmiana schematu online dla MySQL
Rozważmy „normalną” `ALTER TABLE`:
ALTER
dużej tabeli zajmie dużo czasu . innodb_buffer_pool_size
jest ważne, podobnie jak inne zmienne, ale na bardzo dużym stole wszystkie są pomijalne. To po prostu wymaga czasu.
Co MySQL robi, aby ALTER
tabela to utworzenie nowej tabeli w nowym formacie, skopiowanie wszystkich wierszy, a następnie przełączenie. W tym czasie stół jest całkowicie zablokowany.
Rozważ własną sugestię:
Najprawdopodobniej będzie działać najgorzej ze wszystkich opcji. Dlaczego? Ponieważ używasz tabeli InnoDB, INSERT INTO tablename_tmp SELECT * FROM tablename
sprawia, że transakcja. ogromny transakcja. Stworzy jeszcze większe obciążenie niż normalna ALTER TABLE
.
Co więcej, będziesz musiał w tym czasie zamknąć swoją aplikację, aby nie pisała (INSERT
, DELETE
, UPDATE
) do swojego stolika. Jeśli tak - cała transakcja jest bezcelowa.
Co zapewniają narzędzia online
Nie wszystkie narzędzia działają jednakowo. Jednak podstawy są wspólne:
- Tworzą „tablicę cieni” ze zmienionym schematem
- Tworzą i używają wyzwalaczy do propagowania zmian z oryginalnej tabeli do tabeli widma
- Oni powoli skopiuj wszystkie wiersze ze swojej tabeli do tabeli cieni. Robią to porcjami:powiedzmy 1000 wierszy na raz.
- Robią wszystkie powyższe, podczas gdy nadal możesz uzyskać dostęp do oryginalnej tabeli i manipulować nią.
- Gdy są usatysfakcjonowani, zamieniają je dwoma, używając
RENAME
.
zestaw openark Narzędzie jest używane od 3,5 roku. Narzędzie Percona ma kilka miesięcy, ale prawdopodobnie jest bardziej przetestowane niż poprzednie. Mówi się, że narzędzie Facebooka działa dobrze na Facebooku, ale nie zapewnia ogólnego rozwiązania dla przeciętnego użytkownika. Sam go nie używałem.
Edytuj 2016: gh-ost
to rozwiązanie niewymagające wyzwalania, które znacznie zmniejsza obciążenie zapisu mastera, oddzielając obciążenie zapisu migracji od normalnego obciążenia. Jest audytowalny, kontrolowany, testowalny. Opracowaliśmy go wewnętrznie na GitHub i wydaliśmy jako open source; wszystkie nasze migracje produkcyjne wykonujemy za pośrednictwem gh-ost
Dziś. Zobacz więcej tutaj
.
Każde narzędzie ma swoje ograniczenia, spójrz uważnie na dokumentację.
Konserwatywny sposób
Konserwatywnym sposobem jest użycie replikacji Active-Passive Master-Master, wykonaj ALTER
na serwerze rezerwowym (pasywnym), a następnie zmień role i wykonaj ALTER
ponownie na tym, co kiedyś było aktywnym serwerem, teraz stało się pasywne. Jest to również dobra opcja, ale wymaga dodatkowego serwera i głębszej wiedzy na temat replikacji.