Jak pominąć określone tabele za pomocą drush sql-dump?

9

Mam plik konfiguracyjny drush ~ / .drush / drushrc.php:

if (!isset($options['structure-tables']['common'])) {
  $options['structure-tables']['common'] = array(
    'cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog'
  );
}

$options['structure-tables']['common'] = array_merge($options['structure-tables']['common'], 
  array('ctools_css_cache', 'ctools_object_cache', 'logz', 'views_object_cache')
);

I mam plik skryptu bash:

/usr/bin/drush sql-dump --root="/home/username/domains/sitename/www" --skip-tables-key="common" --gzip --result-file=/home/username/backup/$year/$month/dbname_$date_now_time.sql

Ale kiedy go wykonuję, plik kopii zapasowej nadal ma dane w tabelach pamięci podręcznej. Co ja robię źle?

Drugie pytanie brzmi - jeśli umieszczę to w crontab, czy muszę umieścić plik konfiguracyjny w innym miejscu?

Używam wersji Drush 8.

dark_kz
źródło
1
Zastanawiam się, czy drushrc.phpto nie jest uruchamiane. Wypróbuj var_dump $options['structure-tables']w tym, drushrc.phpaby potwierdzić, że jest uruchamiany.
tasak

Odpowiedzi:

0

Przepraszam, ale nie mogę ci pomóc z pierwszym pytaniem ...

Twoje drugie pytanie:

Drugie pytanie brzmi - jeśli umieszczę to w crontab, czy muszę umieścić plik konfiguracyjny w innym miejscu?

Te linki dokumentacyjne drush do drushrc.php pliku przykład , który mówi, gdzie można umieścić plik rc:

https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.drushrc.php

Zmień nazwę tego pliku na drushrc.php i opcjonalnie skopiuj go do jednego z wymienionych poniżej miejsc w kolejności pierwszeństwa:

  1. Folder strony Drupal (np. Sites / {default | example.com} /drushrc.php).
  2. Foldery Drupal / drush i sites / all / drush lub folder / drush w katalogu powyżej katalogu głównego Drupal.
  3. W dowolnym miejscu określonym przez opcję --config (-c).
  4. Folder .drush użytkownika (tj. ~ / .Drush / drushrc.php).
  5. Systemowy folder konfiguracji (np. /Etc/drush/drushrc.php).
  6. Folder instalacyjny Drush.

W przypadku Crona dokumentacja zaleca skonfigurowanie Drusha do działania jako ten sam użytkownik, który uruchamia twój serwer WWW. Biorąc to pod uwagę, zalecam umieszczenie pliku rc w lokalizacji (5), systemowym folderze konfiguracyjnym. Tak, bardziej zlokalizowane pliki Drush rc będą musiały w razie potrzeby zastąpić ogólnosystemowy plik konfiguracyjny (no cóż).

tenken
źródło
Wszystkie te linki są teraz 404. :(
Dale Anderson
@DaleAnderson ... to jest Internet i nic nie jest trwałe. Oto przydatna usługa dla Ciebie. Polecam nauczyć się jej obsługi. Pamiętaj, że właśnie wybrałem migawkę witryny drush.org web.archive.org/web/20150905130324/http://www.drush.org: 80 / pl /… W tym momencie powinieneś rozważyć także spojrzenie na nowsze narzędzia, takie jak Drupal Console lub Drush 9 docs.
tenken
24

Zrzuć wszystkie tabele oprócz cachetabeli i tabel zaczynających się od cache_.

drush sql-dump --skip-tables-list=cache,cache_* > dumpfile.sql

Tylko struktura bazy danych. Brak danych.

drush sql-dump --extra=--no-data > dumpfile.sql

Tylko dane Brak danych w pamięci podręcznej i brak struktury pamięci podręcznej.

drush sql-dump --skip-tables-list=cache,cache_* --data-only > dumpfile.sql

Brak danych w pamięci podręcznej, ale zrzut w ich strukturach.

drush sql-dump --structure-tables-list=cache,cache_* > dumpfile.sql

dokumentacja sql-dump

Francisco Luz
źródło
To --extra=--no-datanie działało dla mnie, ale mogłem to zrobić --skip-tables-list="*"i to zadziałało.
greggles,
Możesz użyć cudzysłowów, "cache,cache_*"aby zapobiec dopasowywaniu przez powłokę plików wywoływanych cache_*w katalogu roboczym.
rudolfbyker
0

Z jakiegoś powodu cache_ * nie działało dla mnie z drush 9+, dopóki nie pominąłem podkreślenia. Jednak może to być specyficzne dla mojego (serwera) bash / terminalu. Co dla mnie zadziałało:

drush sql-dump --skip-tables-list=cache*

i zawsze możesz dodać, --verboseaby zobaczyć rzeczywisty zrzut mysql i jego parametr --ignore.

awm
źródło
W przypadku bash, jeśli cache_*pasuje do jakichkolwiek plików w bieżącym katalogu, to bash globuje nazwy plików i używa ich jako argumentu. Możesz umieścić podwójne cudzysłowy, aby upewnić się, że dosłowna wartość jest przekazywana do polecenia, a nie do plików, które globuje.
greggles,