Как пропустить конкретные таблицы с помощью Drush sql-dump?

9

У меня есть файл конфигурации 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')
);

И у меня есть файл сценария 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

Но когда я выполняю его, файл резервной копии все еще содержит данные в кеш-таблицах. Что я делаю неправильно?

И второй вопрос: если я помещу это в crontab, нужно ли мне помещать файл конфигурации где-нибудь еще?

Я использую Drush версии 8.

dark_kz
источник
1
Интересно drushrc.php, не запускается ли? Попробуйте var_dump из $options['structure-tables']в drushrc.phpтолько , чтобы подтвердить , что это время запуска.
Кливер

Ответы:

0

Извините, я не могу вам помочь с вашим первым вопросом ...

Ваш второй вопрос задан:

И второй вопрос: если я помещу это в crontab, нужно ли мне помещать файл конфигурации где-нибудь еще?

В Drush документации на сайте ссылки на drushrc.php пример файла , который говорит , где вы можете поместить файл гс:

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

Переименуйте этот файл в drushrc.php и при необходимости скопируйте его в одно из мест, перечисленных ниже, в порядке приоритета:

  1. Папка сайта Drupal (например, sites / {default | example.com} /drushrc.php).
  2. Папки Drupal / drush и sites / all / drush или папка / drush в каталоге над корнем Drupal.
  3. В любом месте, как указано параметром --config (-c).
  4. Папка пользователя .drush (т.е. ~ / .drush / drushrc.php).
  5. Общесистемная папка конфигурации (например, /etc/drush/drushrc.php).
  6. Папка установки Drush.

Для Cron документация рекомендует настроить Drush для запуска под тем же пользователем, который запускает ваш веб-сервер. При этом я рекомендую вам поместить свой rc-файл в папку (5), общесистемную папку конфигурации. Да, более локализованные файлы Drush rc затем должны будут переопределить ваш системный файл конфигурации по мере необходимости (да ладно).

tenken
источник
Все эти ссылки теперь 404-х годов. :(
Дейл Андерсон
@DaleAnderson ... это Интернет и ничто не вечно. Вот полезный сервис для вас, я рекомендую вам научиться его использовать. Обратите внимание, что я просто выбрал снимок сентября 2015 года с сайта drush.org web.archive.org/web/20150905130324/http://www.drush.org: 80 / ru /… В настоящее время вам следует рассмотреть возможность использования новых инструментов, таких как Drupal Console или Drush 9 docs.
Тенкен
24

Дамп всех таблиц, кроме cacheтаблицы и таблиц, начинающихся с cache_.

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

Только структура базы данных. Нет данных вообще.

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

Только данные. Нет данных кеша и нет структуры кеша.

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

Нет данных кэша, но дамп в их структурах.

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

документация sql-dump

Франциско Луз
источник
--extra=--no-dataНе работает для меня, но я был в состоянии сделать --skip-tables-list="*"и что работал.
Greggles
Возможно, вы захотите использовать кавычки, например, "cache,cache_*"чтобы ваша оболочка не совпала с файлами, вызываемыми cache_*в вашем рабочем каталоге.
rudolfbyker
0

По какой-то причине cache_ * не работал для меня с drush 9+, пока я не опустил подчеркивание. Однако это может быть характерно для моего (серверного) bash / терминала. Что сработало для меня:

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

и вы всегда можете добавить --verboseфактический дамп mysql и его параметр --ignore.

AWM
источник
С bash, если cache_*совпадает с какими-либо файлами в вашем текущем каталоге, то bash выведет эти имена и использует их в качестве аргумента. Вы можете поместить двойные кавычки вокруг него, чтобы гарантировать, что литеральное значение передается команде вместо любых файлов, которые она содержит.
Greggles