Mam więc testowy serwer db skonfigurowany w strumieniu replikacji. Nad nazwą pojawił się optymalizator, który szybko zapełnił miejsce w katalogu danych o niewolnikach. Mysql sumiennie tylko czekał na więcej miejsca.
Ten datadir to system plików używany TYLKO jako datadir mysql, więc nie było nic więcej do zwolnienia.
Miałem 4-gigabajtową tabelę testową innodb, która nie była częścią strumienia replikacji, więc pomyślałem, że spróbuję czegoś, aby sprawdzić, czy to zadziała, a będąc środowiskiem testowym, nie martwiłem się zbytnio, gdyby coś poszło nie tak.
Oto kroki, które podjąłem
- Opróżniłem stół, który miałem przenieść
- Umieściłem na nim blokadę odczytu (mimo że nic do niej nie zapisywało i nie było jej w strumieniu replikacji)
- Skopiowałem .frm i .ibd do systemu plików w / wolnym pokoju
- Odblokowano stół
- Obcięto tę tabelę - zwolniło to wystarczająco dużo miejsca, aby optymalizacja mogła zakończyć się, a replikacja zacznie ponownie łączyć.
- Zatrzymaj mysql slave / shutdown
- Skopiuj plik z tmp z powrotem do katalogu danych
- Uruchom ponownie mysql
Nic nie pojawia się w dzienniku .err, wszystko wygląda dobrze. Łączę się i używam mydb; i zobacz tabelę, z którą się bałam w tabelach pokazów. Ale jeśli spróbuję
select * from testtable limit 10;
Dostaję błąd
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Z tego, co do tej pory mogę powiedzieć, mogę dobrze odczytać ze wszystkich innych tabel, a replikacja rozpoczęła tworzenie kopii zapasowej bez żadnych skarg.
Czy jest coś, co mogę zrobić, aby odzyskać od tego momentu? Mogę go odbudować od podstaw, jeśli zajdzie taka potrzeba, ale byłem ciekawy, co inni myślą o tym przedsięwzięciu w ogóle. Czy w serii kroków, które podjąłem, było coś, co doprowadziłoby do bezbłędnych rezultatów?
Co jeśli to nie był serwer testowy, nie mógłbym po prostu „zrobić tego na żywo” i zobaczyć, co się stanie? Jaki byłby najlepszy sposób na tymczasowe zwolnienie miejsca na produkcyjnym niewolniku, gdybym musiał to lubić?
Table 'X' doesn't exist in engine
. Czy muszę wykonać powyższą metodę dla każdej tabeli, czy są lepsze sposoby, aby to naprawić?