Które tabele można bezpiecznie wyczyścić?

40

Odziedziczyłem witrynę klienta, która ma bardzo dużą bazę danych bez powodu. Istnieje umiarkowana ilość treści i bardzo mało włączonych modułów. Baza danych jest jednak zbyt duża, aby można ją było łatwo przenosić i chcę ją wyczyścić.

Wyczyściłem standardowe tabele pamięci podręcznej, syslog i dziennik dostępu.

Czy są jakieś inne tabele, które mogę bezpiecznie obciąć w standardowej witrynie Drupal?

Nigel Waters
źródło
1
Możesz sortować tabele na podstawie ich wielkości w phpmyadmin. Spróbuj, a następnie sprawdź, które tabele są największe i zgłoś to tutaj. Na przykład widziałem ogromne tabele sesji, które z jakiegoś powodu nie zostały wyczyszczone. Jest to coś, co można wyczyścić, jeśli możesz żyć z użytkownikami, którzy muszą się ponownie zalogować (i być może stracą wprowadzone dane formularza, jeśli są na stronie, więc możesz chcieć to skoordynować z użytkownikami)
Berdir
Wystarczy wspomnieć, że wszystkie poniższe odpowiedzi, które wspominają o obcięciu, {cache_form}nie są tak naprawdę poprawne. To nie jest prawdziwa tabela pamięci podręcznej. Zawiera w trakcie przesyłania formularzy. Jeśli usuniesz wszystkie dane z tej tabeli, użytkownik może utracić dane. Właściwą czynnością związaną z tą tabelą jest wygaśnięcie wpisów.
mpdonadio

Odpowiedzi:

21

Użyj modułu tworzenia kopii zapasowych i migracji , który ma dobre ustawienia domyślne do pomijania niepotrzebnych danych . Domyślnie generuje kopię zapasową DB bez pamięci podręcznej, watchdoga i niektórych innych tabel.

Jeśli to nie pomoże, zajrzyj do phpMyAdmin i powiedz nam, które tabele zawierają wiele wpisów.

BetaRide
źródło
1
To jest pierwsze miejsce, w którym pojechałem. Jednak baza danych trwa ponad koncert i nie można wykonać kopii zapasowej za pomocą tej metody. Mam zamiar wyczyścić bazę danych, aby móc regularnie korzystać z kopii zapasowej i migrować. Zasadniczo zastanawiam się, czy są jeszcze jakieś tabele, które mogę wyczyścić (które domyślnie nie są pomijane przez BAM).
Nigel Waters,
Jeśli masz dostęp do wiersza poleceń, możesz użyć drush, aby rozpocząć tworzenie kopii zapasowej i migrację. Lub uzyskaj dostęp do mysql w wierszu poleceń (przykład: mysqldump --host = twój.host.com - użytkownik = użytkownik_db - kompresuj - hasło twoje_pw> dump.sql) W ten sposób nie wpadniesz w limity czasu. Ogólnie rzecz biorąc, czyszczenie bez kopii zapasowej nie jest zbyt bezpieczne. Możesz łatwo skończyć z uszkodzoną stroną i nie ma możliwości powrotu.
BetaRide,
Problem nie dotyczy limitów czasu. Wiem, że mogę łatwo wykonywać kopie zapasowe za pośrednictwem ssh / drush. Chciałbym posprzątać bazę danych, ponieważ w ciągu ostatnich kilku lat widziałem wiele osób i jest w niej dużo niepotrzebnego zamieszania. Muszę tylko wiedzieć, które tabele mogę bezpiecznie wyczyścić (nie wiem, jak wykonać kopię zapasową lub przenieść moją witrynę).
Nigel Waters,
@ BetaRide jest poprawny, domyślne są wykluczone przez BAM i są bezpieczne. Inne mogą, ale nie muszą mieć rzeczywistych danych.
mpdonadio
22

Drupal 7 tabel, które można wykluczyć

Oto lista tabel w Drupal 7, które możesz albo wyczyścić (aby zmniejszyć rozmiar bazy danych), albo bezpiecznie wykluczyć przeprowadzenie migracji (jak w pytaniu o to, jak zmniejszyć rozmiar lokalnie eksportowanej bazy danych, aby ominąć limit importu mojego serwera? ):

  • dziennik dostępu
  • partia
  • wszystkie tabele związane z pamięcią podręczną, takie jak:
    • Pamięć podręczna*
    • blok_pamięci podręcznej
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • menu podręczne *
    • cache_page *
    • cache_views
    • * _cache, na przykład cache_cache lub cache_portu_danych_obiektu
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • powódź
  • historia
  • kolejka
  • różne tabele search_ *, takie jak:
    • search_dataset
    • search_index
    • search_ke words_log
    • search_total
  • semafor
  • sesje
  • pies podwórzowy
  • webform_submitted_data

Zwykle tabele takie jak search_indexi watchdogzajmują dużo miejsca w bazie danych, więc samo wyeliminowanie tych 2 tabel może już mieć ogromną różnicę.

Inne tabele, które można wykluczyć

Sprawdź rozmiar pozostałych tabel i określ, który z nich ma największy rozmiar.

Zazwyczaj można znaleźć tabele sesji, dla których nie ma procedury czyszczenia. Takie tabele można prawdopodobnie również wykluczyć.

Moduł tworzenia kopii zapasowych i migracji

Aby jeszcze bardziej ograniczyć to wyzwanie, jak opisano w „ Jak zmniejszyć lokalnie eksportowany rozmiar bazy danych, aby ominąć limit importu mojego serwera? ”, Spójrz także na moduł Kopia zapasowa i migracja . Oto cytat ze strony projektu (dodano tu pogrubiony znacznik):

Wykonaj kopię zapasową i przywróć bazę danych Drupal MySQL, kod i pliki lub migruj witrynę między środowiskami. Backup and Migrate obsługuje kompresję gzip, bzip i zip, a także automatyczne zaplanowane kopie zapasowe.

Dzięki Backup and Migrate możesz zrzucić niektóre lub wszystkie tabele bazy danych do pliku do pobrania lub zapisać w pliku na serwerze lub poza nim, a także przywrócić z przesłanego lub wcześniej zapisanego zrzutu bazy danych. Możesz wybrać, które tabele i jakie dane do utworzenia kopii zapasowej i pamięci podręcznej są domyślnie wykluczone .

Jest jeszcze więcej: jeśli Twoje środowisko lokalne (np. Win lub Mac) różni się od systemu operacyjnego, w którym działa serwer hostowanej witryny (np. Linux), to różnice między systemami operacyjnymi oznaczają potencjalne dodatkowe wyzwania. Miałem dobre doświadczenia z modułem Backup and Migrate między różnymi systemami operacyjnymi, co nie spowodowało żadnych problemów (działało dobrze) w sytuacjach, w których typowy eksport / import MySql wcześniej nie powiódł się.

Pierre.Vriens
źródło
Dobry dodać, że wszelkie tabele z cache_poprzedzany lub _cachedołączane są bezpieczne obciąć, jak również, takich jak features_cachelub views_data_object_export_cacheitd.
BeeBee
1
Słowo ostrzeżenia, dane tabeli wyszukiwania można wykluczyć, ale odbudowanie indeksów w dużych witrynach może zająć bardzo, bardzo długo. Oceniaj to na podstawie poszczególnych przypadków.
mpdonadio
2
Ponadto fragment B&M dotyczący danych w pamięci podręcznej jest nieco niepoprawny. Po włączeniu w witrynie wyklucza tabele pamięci podręcznej. Jeśli jednak dodasz moduł po skonfigurowaniu B&M, tabele pamięci podręcznej mogą nie zostać dodane do listy wykluczonych danych. Widziałem to wiele, wiele razy, zwykle po zastąpieniu ustawień domyślnego profilu.
mpdonadio
@MPD: dziękuję za tę interesującą opinię (jeszcze o tym nie wiedziałem!). Informacje o tabeli wyszukiwania: ważny punkt. Ale osobiście zawsze wybrałbym podejście do przebudowy: pomaga obejść ograniczenia i zapewnia, że ​​indeks pasuje do rzeczywistej zawartości w celu. O twoim drugim komentarzu: fragment jest fragmentem ze strony projektu, więc może chcesz zgłosić problem w kolejce problemów (Drupal.SE nie jest miejscem do zgłaszania błędów, itp., Prawda?) .
Pierre.Vriens,
@ Pierre.Vriens Dopasowywanie treści nie powinno mieć znaczenia, zakładając, że masz uruchomiony cron i upewnij się, że nastąpi indeksowanie. B&M, jestem pewien, że to znany problem. Ponadto sekcja o danych sesji nie jest w 100% poprawna. Stół staje się duży, ponieważ domyślny czas sesji wynosi około trzech tygodni; _drupal_session_garbage_collectionutrzyma porządek w tej tabeli, w oparciu o ustawienia systemowe.
mpdonadio
19

Z doświadczenia wiem, że usuwam wszystkie tabele „cache_ *”.

  • plus „watchdog”, jeśli nie dbam o wcześniejsze logi Drupala
  • plus „dziennik dostępu”, jeśli nie dbam o zalogowanych użytkowników
  • plus „szukaj”, jeśli nie dbam o zawartość indeksowanych węzłów
thePanz
źródło
1
To samo tutaj, również sesje.
Alex Weber
2
Uwaga dla każdego, kto to spróbuje: najpierw utwórz kopię zapasową. I nie upuszczaj tabel, raczej opróżnij lub obetnij.
timofey.com
9

Czasami uruchamiam ten SQL, aby obserwować wzrost liczby najlepszych tabel:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 
uwe
źródło
W której kolumnie powinienem sprawdzić wzrost? Masz na myśli TABLE_ROWS
Bala,
8

Watchdog i sesje można również wyczyścić, pamiętaj, że wszyscy użytkownicy zostaną wylogowani.

Attiks
źródło
6

Dzięki mySQL możesz robić fajne rzeczy z programem mysqldump, aby eksportować bazę danych w całości lub w części. Na przykład to po prostu eksportuje strukturę:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

Następnie możesz użyć opcji „zignoruj ​​tabelę” w celu dalszego eksportu danych, np

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

To umieszcza dane na końcu wcześniejszego pliku, ignorując niektóre ogromne tabele.

Jeśli następnie potrzebujesz ogromnych tabel, możesz je wyeksportować do innego pliku, stosując powyższe podejście, możesz następnie zaimportować je we fragmentach (chociaż może być konieczne wyłączenie kontroli fk).

Skopiowałeś plik przed przesłaniem, czy to głupie pytanie?

Kot Henry'ego
źródło
5

Użyj modułu OptimizeDB , aby wyczyścić tabele pamięci podręcznej. Administracja bazy danych jest również pomocne.

Nie zapomnij mieć kopii zapasowej baz danych.

M ama D.
źródło
baza danych ma teraz 14 milionów, użyłem OptimizeDB, dziękuję jeszcze raz
Mitch
@Mitch you welcome
M ama D
2

nie super ekspertem od tego, ale dzielenie się moje doświadczenie ... jeśli nie korzystasz z kopii zapasowej oraz moduł migrować i ręcznie wyeksportować je niektórych stołach można opróżnić / truncate byłoby watchdog, cache, cache_menu, cache_block, cache_content, cache_formponieważ mogą one zawierać duże ilość usuwanych danych z pamięci podręcznej, która, jak sądzę, nie zaszkodzi ... ale znowu to jest moje doświadczenie i nie napotkałem z tego powodu problemów ani utraty danych.

optimusprime619
źródło
2

Jakieś pomysły:

  • Zupełnie innym podejściem byłoby tworzenie kanałów RSS przy użyciu widoków danych, które chcesz zachować. Następnie utwórz nową instalację Drupal i zaimportuj te dane za pomocą Feed API .
  • I jeszcze jedno podejście: Zatrudnij studenta i pozwól mu ręcznie przenieść dane do nowej instalacji.
  • Lub ten: Powiedz nam więcej o tym, które tabele są bardzo duże i jaki jest tego powód (jeśli wiesz).
BetaRide
źródło
2

Sprawdź, example.drushrc.phpktóra lista:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

Można je bezpiecznie wyczyścić w zakresie przenoszenia bazy danych między różnymi środowiskami (szczególnie podczas pracy z dużymi bazami danych ). Jednak nadal musisz zrozumieć, co rozliczasz.

kenorb
źródło
1

Dodatkowe tabele, które można wyczyścić:

  • partia
  • webform_submitted_data

Inne rzeczy, które mogą zająć trochę miejsca: - starsze wersje treści (niemożliwe do wyczyszczenia za pomocą prostego obcięcia). - locales_source i locales_target. Jeśli masz języki, które nie są już używane lub tłumaczenia ciągów dla modułów, których już nie używasz. Te tabele wydają się nigdy nie zostać oczyszczone.

fietserwin
źródło