MySQL ma polecenie OPTIMIZE TABLE, którego można użyć do odzyskania nieużywanego miejsca w instalacji MySQL. Czy istnieje sposób (wbudowana komenda lub wspólna procedura przechowywana), aby uruchomić tę optymalizację dla każdej tabeli w bazie danych i / lub instalacji serwera, czy jest to coś, co musiałbyś sam napisać?
245
OPTIMIZE TABLE
był użyteczny dla MyISAM. Teraz, gdy silnik odchodzi, potrzebaOPTIMIZE TABLE
odchodzi, szczególnie potrzeba okresowej optymalizacji wszystkich tabel.Odpowiedzi:
Możesz
mysqlcheck
to zrobić w wierszu polecenia.Jedna baza danych:
Wszystkie bazy danych:
źródło
mysqlcheck -u [username] -p[password] -o [database name]
OPTIMIZE TABLE
polecenia: dev.mysql.com/doc/refman/5.5/en/optimize-table.html . Na przykład zoptymalizuj jedną tabelę w ten sposób:OPTIMIZE TABLE <your_schema>.<your_table>;
zoptymalizuj wszystkie tabele w danym schemacie w ten sposób:select concat('OPTIMIZE NO_WRITE_TO_BINLOG TABLE ',table_schema,'.',table_name,';') into outfile '/tmp/optimize_all_tables.sql' from information_schema.tables where table_schema = 'pabeta' and table_type = 'base table'; source /tmp/optimize_all_tables.sql;
Stworzyłem ten „prosty” skrypt:
Aby go uruchomić, po prostu wklej go w dowolnym SQL IDE podłączonym do bazy danych.
Uwaga: ten kod NIE działa na phpmyadmin.
Jak to działa
Uruchamia
show tables
instrukcję i przechowuje ją w przygotowanej instrukcji. Następnie uruchamia aoptimize table
w wybranym zestawie.Możesz kontrolować, które tabele zoptymalizować, ustawiając inną wartość w var
@tables_like
(npset @tables_like = '%test%';
. :) .źródło
bd
z @b Kod błędu: 1064. Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL pod kątem właściwej składni do użycia w pobliżu „NULL” w linii 1Poniższy przykładowy skrypt php może pomóc zoptymalizować wszystkie tabele w bazie danych
źródło
Wykonaj wszystkie niezbędne procedury, aby naprawić wszystkie tabele we wszystkich bazach danych za pomocą prostego skryptu powłoki:
źródło
dla wszystkich baz danych:
Dla jednej optymalizacji bazy danych:
źródło
mysqlcheck -Aos
nie wymaga użytkownika + hasła.Z phpMyAdmin i innych źródeł możesz użyć:
Następnie możesz skopiować i wkleić wynik do nowego zapytania lub wykonać go z własnego źródła. Jeśli nie widzisz całego oświadczenia:
źródło
Jeśli chcesz analizować, naprawiać i optymalizować wszystkie tabele we wszystkich bazach danych na serwerze MySQL, możesz to zrobić za jednym razem z wiersza polecenia. Musisz to zrobić root.
Po uruchomieniu zostaniesz poproszony o podanie hasła root MySQL. Następnie zacznie się, a zobaczysz wyniki, jak to się dzieje.
Przykładowe dane wyjściowe:
Jeśli nie znasz hasła roota i używasz WHM, możesz je zmienić z poziomu WHM, przechodząc do: Strona główna> Usługi SQL> Hasło root MySQL
źródło
Z linii poleceń:
następnie wpisz hasło
źródło
Możesz zoptymalizować / sprawdzić i naprawić wszystkie tabele bazy danych, używając klienta mysql.
Po pierwsze, powinieneś uzyskać listę wszystkich tabel oddzielonych znakami „,”:
Teraz, gdy masz listę wszystkich tabel do optymalizacji:
źródło
(
MySQL Administrator
(Część narzędzi GUI MySQL) może to zrobić na poziomie bazy danych.Po prostu wybierz swój schemat i naciśnij
Maintenance
przycisk w prawym dolnym rogu.Ponieważ narzędzia GUI osiągnęły status wycofania z eksploatacji, trudno je znaleźć na stronie mysql. Znaleziono je za pośrednictwem Google: http://dev.mysql.com/downloads/gui-tools/5.0.html
Nie wiem, czy nowy MySQL Workbench też to potrafi.
Możesz także użyć
mysqlcheck
narzędzia wiersza poleceń, które powinno być w stanie to zrobić.źródło
Jeśli uzyskujesz bezpośredni dostęp do bazy danych, możesz napisać następujące zapytanie:
źródło
Ten skrypt bash zaakceptuje hasło roota jako opcję i zoptymalizuje je jeden po drugim, z wyjściem statusu:
źródło
Skrypt startowy bash do wyświetlania listy i uruchamiania narzędzia przeciwko bazom danych ...
źródło
moje 2 centy: zacznij od tabeli o największej fragmentacji
źródło