Nowa instalacja CentOS.
Uruchomiłem import dużej bazy danych (plik 2 GB sql) i miałem problem. Klient SSH wydawał się tracić połączenie, a import wydawał się zawieszać. Użyłem innego okna, aby zalogować się do mysql, a import wyglądał na martwy, utknął w konkretnej tabeli wierszy 3M.
Więc próbowałem
DROP DATABASE huge_db;
15-20 minut później nic. W innym oknie zrobiłem:
/etc/init.d/mysqld restart
Komunikat w oknie DROP DB: SERVER SHUTDOWN. Następnie zrestartowałem serwer fizyczny.
Zalogowałem się ponownie do mysql, sprawdziłem, a db wciąż tam jest, uruchomiłem
DROP DATABASE huge_db;
znowu i znowu czekam już około 5 minut.
Po raz kolejny jest to świeża instalacja. Jest huge_db
to jedyna db (inna niż systemowa dbs). Przysięgam, że upuściłem db tak duże wcześniej i szybko, ale może się mylę.
Pomyślnie upuściłem bazę danych. Zajęło to około 30 minut. Zauważ też, że myślę, że się pomyliłem, kiedy myślałem, że import mysqldump nie działa. Połączenie z terminalem zostało utracone, ale myślę, że proces nadal działał. Najprawdopodobniej zabiłem importowaną tabelę środkową (tabelę wierszy 3M) i prawdopodobnie 3/4 drogi przez całą bazę danych. Mylące było to, że „top” pokazywał mysql wykorzystujący tylko 3% pamięci, kiedy wydawało się, że powinien zużywać więcej.
Upuszczenie DB skończyło się 30 minutami, więc znowu mogłem nie musieć restartować serwera i prawdopodobnie mogłem tylko poczekać na zakończenie DROP, ale nie wiem, jak mysql zareagowałby na otrzymanie zapytania DROP dla ten sam db, który importuje przez mysqldump.
Pozostaje jednak pytanie, dlaczego DROP zajmuje ponad 30 minut, aby usunąć DROP z bazy danych o pojemności 2 GB, kiedy wszystko, co trzeba zrobić, to usunąć wszystkie pliki db i usunąć wszystkie odwołania do bazy danych z schematu_informacyjnego? O co tyle szumu?
DROP DATABASE
polecenia serwer nie będzie kontynuował, dopóki wszystkie połączenia nie zostaną zamknięte.